接近警报未触发



我在仿真器上运行的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");
    }
}

}

我相信我的问题与意图或悬念对象有关,但我不确定。我也听说,通常GPS需要大约一分钟才能实际注册接近度,但是即使在一段时间后我仍然没有收到日志消息。

谢谢!

您已经创建了一个用操作MY_PROXIMITY_ALERT创建的Intent,然后使用PendingIntent.getActivity()获取PendingIntent传递到LocationManager。当满足接近条件时,LocationManager将尝试启动正在侦听操作MY_PROXIMITY_ALERT Activity

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

在您的清单中,您已声明了正在收听操作MY_PROXIMITY_ALERTBroadcastReceiver。这行不通。

由于您希望接近警报触发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中使用该操作。

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

相关内容

  • 没有找到相关文章

最新更新