我遇到了接近警报的问题。我在我的 android 应用程序上有设置,用户可以在其中禁用/启用某些位置的接近警报。当他们禁用接近警报时,一切正常,他们不会收到通知,但是如果他们禁用并重新启用接近警报,它会再次添加,并且当他们到达某个位置时会收到两次通知,依此类推。所以基本上每次他们重新启用它时,它都会创建一个新的接近警报。

这是我用来删除接近警报的代码:

private void removeProximityAlert(int id) {
    final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
    Intent intent = new Intent(PROX_ALERT_INTENT + id);
    PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    manager.removeProximityAlert(proximityIntent);
}

这是我用来添加接近警报的代码:
private void addProximityAlert(double latitude, double longitude, int id, int radius, String title) {
    final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
    Intent intent = new Intent(PROX_ALERT_INTENT + id);
    PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    manager.addProximityAlert(
           latitude,
           longitude,
           radius,
           -1,
           proximityIntent
    );

    IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + id);
    registerReceiver(new ProximityIntentReceiver(id, title), filter);
}

最佳答案

我对 FLAG_CANCEL_CURRENT 的理解是它告诉系统旧的挂起 Intent 不再有效,它应该取消它然后创建一个新的 Intent 。如果我错了,请纠正我。我相信,这就是您在每次取消和创建时复制接近警报的原因。

分辨率:

在您的 removeProximityAlert 中,我将更改以下行

PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_CANCEL_CURRENT);

至:
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT).cancel();
FLAG_UPDATE_CURRENT 返回创建的现有代码(如果有)。 cancel() 应该为您处理剩下的事情。

编辑

如果我将 cancel() 分成单独的一行,则不会出现任何错误。试试这个:
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
proximityIntent.cancel();

关于android - 删除和重新添加后,接近警报触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13291009/

10-10 22:47