4

近接アラートに問題があります。ユーザーが一部の場所の近接アラートを無効/有効にできる Android アプリケーションの設定があります。近接アラートを無効にすると、すべてがうまく機能し、通知されませんが、近接アラートを無効にして再度有効にすると、再び追加され、場所に到達したときに通知が 2 回届きます。したがって、基本的に、再度有効にするたびに、新しい近接アラートが作成されます。

これは、近接アラートを削除するために使用するコードです。

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);
}
4

2 に答える 2

1

私の理解でFLAG_CANCEL_CURRENTは、古い保留中のインテントが無効になり、それをキャンセルしてから新しいインテントを作成する必要があることをシステムに伝えるということです。私が間違っている場合は修正してください。これが、キャンセルと作成のたびに近接アラートを複製している理由だと思います。

解像度:

あなたの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();
于 2012-11-08T15:20:13.587 に答える
0

問題は、アラームを追加するたびに受信者を登録していることです。一度だけ登録してください。

于 2014-05-22T18:03:04.320 に答える