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 件のコメント :
コメントを投稿