我在使用模拟器上运行的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需要大约一分钟来实际注册接近度,但即使过了一段时间我仍然没有收到日志消息。
谢谢!
答案 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
。
使用“显式”Intent
告诉Android确切要启动哪个组件(类)。如果您使用“隐式”Intent
,Android必须搜索宣传他们可以处理某些操作的组件。