接近警报不会触发

时间:2018-04-25 02:49:56

标签: android android-intent location android-pendingintent proximity

我在使用模拟器上运行的Android应用程序上运行接近警报时遇到了一些麻烦。基本上,接近警报应该启动将(现在)打印到日志的活动,但是当为警报设置了期望的位置,并且仿真器的位置设置在该特定位置时,没有任何事情发生。以下是接近警报的代码:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getActivity(MapActivity.this, 0, intent, 0);

lm.addProximityAlert(latlng.latitude, latlng.longitude, 100, -1, proxIntent);

现在,在清单中声明了MY_PROXIMITY_ALERT,如下所述:

<receiver android:name=".myLocationReceiver">
   <intent-filter>
       <action android:name="PROXIMITY_ALERT"/>
   </intent-filter>
</receiver>

这是我的myLocationReceiver代码

public class myLocationReceiver extends BroadcastReceiver{

private static final String TAG = "myLocationReceiver";

@Override
public void onReceive(Context context, Intent intent) {

    final String key = LocationManager.KEY_PROXIMITY_ENTERING;
    final Boolean entering = intent.getBooleanExtra(key, false);

    if(entering) {
        Log.d(TAG, "onReceive: Entering proximity of location");
    }

}

}

我相信我的问题与Intent或PendingIntent对象有关,但我不完全确定。另外我听说通常GPS需要大约一分钟来实际注册接近度,但即使过了一段时间我仍然没有收到日志消息。

谢谢!

1 个答案:

答案 0 :(得分:0)

您已创建Intent行动MY_PROXIMITY_ALERT,然后使用PendingIntent.getActivity()PendingIntent传递给LocationManager。当满足邻近条件时,LocationManager将尝试启动正在侦听操作Activity MY_PROXIMITY_ALERT

Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getActivity(MapActivity.this, 0, intent, 0);

在您的清单中,您已宣布正在侦听操作的BroadcastReceiver MY_PROXIMITY_ALERT。这不起作用。

由于您希望接近警报触发BroadcastReceiver,因此您需要获取PendingIntent,如下所示:

Intent intent = new Intent(MY_PROXIMITY_ALERT);
PendingIntent proxIntent = PendingIntent.getBroadcast(MapActivity.this, 0, intent, 0);

就我个人而言,我认为最好使用“明确”Intent而不是“隐含”Intent。在这种情况下,你会这样做:

Intent intent = new Intent(MapActivity.this, myLocationReceiver.class);
PendingIntent proxIntent = PendingIntent.getBroadcast(MapActivity.this, 0, intent, 0);

您无需在Intent

中使用ACTION

使用“显式”Intent告诉Android确切要启动哪个组件(类)。如果您使用“隐式”Intent,Android必须搜索宣传他们可以处理某些操作的组件。