繁体   English   中英

移除和重新添加后,接近警报触发两次

[英]Proximity alert firing twice after removing and re-adding

我有接近警报的问题。 我在我的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理解是它告诉系统旧的待处理意图不再有效,它应该取消它然后创建一个新的意图。 如果我错了,请纠正我。 我相信,这就是为什么每次取消和创建都要复制Proximity Alerts的原因。

解析度:

在你的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();

问题是每次添加警报时都要注册接收器。 你应该只注册一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM