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