Notification に RemoteViews で乗っけた Button をタップしたところ、2回タップしたような状況が発生。
より具体的には、音楽プレイヤを通知領域からコントロールしたかったので、ボタンを並べて、機能するようにしたんだけど、1曲飛ばしたつもりが2曲飛んでしまったりして、思った通りに動いてくれないような状況。
原因は、BroadcastReceiver でタップ通知しているためのよう。
# もし、他の方法があれば是非とも教えて欲しいところですが。
方針としては、「1回目の通知が来たら、フラグを立ててから処理し、1回目の直後に発生した2回目以降の通知では何も処理させずに終わらせ、一定時間経ったらフラグを戻す」というような感じ。
参照させていただいた方法と、処理の位置が違うのと、Timer の状態で判定しているところが boolean での判定になっているくらいでほとんど変わらないという話も。
private static boolean cancelerState = false;
private static Handler cancelerHandler = new Handler();
public class NotificationReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    if (cancelerState) {  // 処理が行われたばかりであれば、キャンセルする
      return;
    }
    cancelerState = true;  // キャンセラー有効化
    // 処理の記述
    String action = Intent.getAction();
    if (action.equals("ACTION_1")) {
      // action 1
      ...
    } else if (action.equals("ACTION_2")) {
      // action 2
      ...
    } else if (...
      ...
      ...
    }
    // タイマーを走らせる
    Timer cancelerTimer = new Timer();
    cancelerTimer.schedule(new TimerTask() {
      @Override
      public void run() {
        cancelerHandler.post(new Runnable() {
          public void run() {
            cancelerState = false;  // 戻す
          }
        });
      }
    }, 500);  // 500 ms 待って実行 (適当)
  }
  /**
   * コンストラクタ
   */ 
  public NotificationReceiver() {
  }
}
# ページに貼るためにちょこちょこ弄っているので、このままじゃ動かないかもです。あしからず。とりあえず、こんな感じの処理にして解決。
# 参考

 
0 件のコメント :
コメントを投稿