マクドナルドアプリ等、backを1度押すとToastが表示され、Toast表示中にもう一度backを押すとアプリが終了するものを作成してみました。
-------------------------------------------
Toast finToast;
// backkeyで使うスレッド用////////////////////
Timer bTimer = null;
// 動いてるか動いてないかのチェック用
boolean bChk = false;
//バックを実行するかどうか
int bStar = 0;
//秒数かうんと
int bcount = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finToast =Toast.makeText(this, "[戻る]をもう一度押すと終了", Toast.LENGTH_SHORT);
// ここ自由
}
@Override
protected void onResume() {
super.onResume();
bStar = 0;
}
protected void onPause() {
super.onPause();
backCountStop();
}
///////////////////Back///////////////////////////////////
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// なんのkeydownかを判断 今回はバックキー
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(bStar == 0){
finToast.show();
bStar = 1;
backCountStart();
}else {
backCountStop();
finToast.cancel();
finish();
}
}
return false;
}
// //////////////////////タイマー/////////////
public void backCountStart() {
// 動いてたらそのまま
if (bChk) {
// 止まってたら起動
} else {
bTimer = new Timer(true);
bTimer.schedule(new TimerTask() {
@Override
public void run() {
if(bcount == 2){
bStar =0;
bcount = 0;
backCountStop();
}
bcount++;
}
}, 1000, 1000); // 初回起動の遅延と周期指定。単位はms
bChk = true;
}
}
public void backCountStop() {
// 動いてたら入る、止まってたらスルー
if (bChk) {
if (bTimer != null) {
bTimer.cancel();
bTimer = null;
}
bChk = false;
}
}
-------------------------------------------------
とりあえずこんな感じです。
後々デバッグで修正する可能性有りです
上記より良い方法があったら教えてください!
private volatile boolean mConfirmExit;
返信削除@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if(!mConfirmExit) {
Toast.makeText(MainActivity.this, R.string.confirm_exit, Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mConfirmExit = false;
}
}, getResources().getInteger(R.integer.confirm_exit_delay));
mConfirmExit = true;
} else {
finish();
}
return true;
}
}
return super.dispatchKeyEvent(event);
}
こんな感じでどうでしょ?
コメントありがとうございます。
返信削除自分のよりかなり短くなっていますね。
後日詳しく拝見させていただきます。
ご返事おくれてすいません。