4

当手机靠近某个位置时,我正在尝试获取和更新。我都尝试过使用 addProximityAlert 和 requestLocationUpdates

    LocationManager lm =(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location l = lm.getLastKnownLocation("gps");
    Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert");
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    lm.addProximityAlert(12, 12, 100, 1000000, pIntent);

这个永远不会触发意图(我知道这是有效的,因为我可以手动触发它)。我尝试使用监听器,但它只执行一次。无论我更新 gps 多少次,它都不会再被调用

    ProximityListener pl = new ProximityListener();
    lm. requestLocationUpdates("gps", 2000, 10, pl); 

这是活动的代码(在第一种情况下调用)

public class ProximityAlert extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Log.d("intent", "Hi");
    finish();
}

这是监听器

public class ProximityListener implements LocationListener {
String DEBUG_TAG = "ProximityListener";
@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    Log.d(DEBUG_TAG, location.toString());

}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}
}

谢谢

4

4 回答 4

5

我认为问题在于您如何定义 Intent / PendingIntent。使用 Intent 启动 Activity 有两种方法,您包含的代码看起来像是两者的交叉。

启动 Activity 的标准方法是使用 Intent 构造函数,该构造函数采用当前上下文和 Activity 的类,并使用getActivityon 方法PendingIntent创建 PendingIntent:

Intent intent = new Intent(this, ProximityAlert.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

或者,您可以IntentReceiver在 Manifest 中的 Activity 中添加一个用于侦听特定操作的 IntentFilter(例如“eu.mauriziopz.gps.ProximityAlert”)。但是,在这种情况下,您需要使用PendingIntent.getBroadcast来创建 PendingIntent。

Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert");
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

在所有情况下,您都需要确保您已获得清单中定义的基于位置的服务的正确权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

此外,您可以考虑使用静态常量,而不是使用字符串“gps” LocationManager.GPS_PROVIDER

于 2009-06-03T23:38:47.220 回答
1
Intent intent = new Intent("com.sccp.fourgdummy.REQUEST_DFGS");
intent.putExtra("launch_tab", "otp");
PendingIntent proximityIntent = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

这个很重要 :Intent.FLAG_ACTIVITY_NEW_TASK

于 2011-06-21T08:29:05.490 回答
1

API 定义了addProximityAlertlat、long、radius、expiration、intent 的参数。您是否尝试过将到期时间设置为-1而不是100000

lm.addProximityAlert(12, 12, 100, 1000000, pIntent);

lm.addProximityAlert(12, 12, 100, -1, pIntent);
于 2011-12-19T05:43:39.363 回答
0

I don't think you should terminate the Activity already in the onCreate method (by calling finish()).

于 2009-06-01T12:32:43.077 回答