我在仿真器上运行的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_ALERT
的BroadcastReceiver
。这行不通。
由于您希望接近警报触发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必须搜索可以宣传它们可以处理某些操作的组件。