我想使用Android的LocationManager和addProximityAlert方法来设置邻近警报。为此,我创建了一个小应用程序,在地图上显示十字准线,加上接近警报名称的文本字段和触发添加警报的按钮。
不幸的是,不会触发应接收邻近警报的BroadcastReceiver。我已经单独测试了这个意图(没有通过PendingIntent包裹)并且有效。另外,我看到一旦设置了接近警报,GPS /位置图标就会出现在通知栏中。
我发现有关接近警报的信息有点令人困惑 - 有些人告诉如果活动不再在前台,则无法使用警报。我认为它应该工作,所以我认为其他错误。
1添加邻近警报
GeoPoint geo = mapView.getMapCenter();
Toast.makeText(this, geo.toString(), Toast.LENGTH_LONG).show();
Log.d("demo", "Current center location is: " + geo);
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, getLocationAlertIntent(), 0);
locationManager.addProximityAlert(geo.getLatitudeE6()/1E6, geo.getLongitudeE6()/1E6, 1000f, 8*60*60*1000, pIntent);
意图本身就在这里:
private Intent getLocationAlertIntent()
{
Intent intent = new Intent("com.hybris.proxi.LOCATION_ALERT");
intent.putExtra("date", new Date().toString());
intent.putExtra("name", locationName.getEditableText().toString());
return intent;
}
我创建了一个接收器,它应该接收在AndroidManifest.xml中注册的位置警报:
<receiver android:name=".LocationAlertReceiver">
<intent-filter>
<action android:name="com.hybris.proxi.LOCATION_ALERT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
实施本身很有希望直截了当。它应该显示一个通知(我通过直接发送一个带有测试按钮的意图来检查)。
public class LocationAlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
Log.d("demo", "Received Intent!");
String dateString = intent.getStringExtra("date");
String locationName = intent.getStringExtra("name");
boolean isEntering = intent.getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, false);
NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification.Builder(ctx)
.setContentTitle("LocAlert: " + locationName)
.setContentText(dateString + "|enter: " + isEntering)
.setSmallIcon(R.drawable.ic_stat_loc_notification)
.build();
notificationManager.notify(randomInteger(), notification);
}
private int randomInteger()
{
Random rand = new Random(System.currentTimeMillis());
return rand.nextInt(1000);
}
我不是100%肯定的一些事情,也许这会触发你的某些事情:
任何帮助都非常感谢!!
答案 0 :(得分:0)
我遇到了同样的问题。在我的例子中明确地设置了目标的目标类。在您的情况下,它应该看起来如下:
private Intent getLocationAlertIntent()
{
Intent intent = new Intent(context, LocationAlertReceiver.class);
intent.setAction("com.hybris.proxi.LOCATION_ALERT"); //not sure if this is needed
intent.putExtra("date", new Date().toString());
intent.putExtra("name", locationName.getEditableText().toString());
return intent;
}