addProximityAlert不起作用(requestLocationUpdates也不起作用) - Android

时间:2009-05-25 14:02:28

标签: android gps android-sensors

我正试图在手机靠近某个位置时获取并更新。 我都尝试过使用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

}
}

由于

3 个答案:

答案 0 :(得分:5)

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

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

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

或者,您可以在Manifest中为您的Activity添加IntentReceiver,并使用侦听特定操作的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"/>

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

答案 1 :(得分: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

答案 2 :(得分:0)

我认为你不应该在onCreate方法中终止Activity(通过调用finish())。