QA@IT

【Android】バックキーの長押し時の処理を通常押下と同一にしたい

3117 PV

いつもお世話になっております、
Androidのキーイベントの実装について質問させてください。

質問

キー(本件ではバックキー)の長押し時の処理を通常押下時と同一にしたい

試行

以下のようなソースコードを作成しました。

        /** BACKキーの長押し状態 */
    protected boolean isLongPressed = false;

    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        Log.v("KeyEventTest", "onKeyLongPress");

        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
            // back キーの長押し
            isLongPressed = true;
            return true;
        }

        return super.onKeyLongPress(keyCode, event);
    }

    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.v("KeyEventTest", "onKeyUp");

        if(isLongPressed) {
            if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
                onBackPressed();
            }
            isLongPressed = false;
            return true;
        }

        return super.onKeyUp(keyCode, event);
    }

上記コードでは、以下のケースに対応できませんでした。
「押し始め=バックキー、指を画面につけたまま移動して
 バックキーの領域から外れた時」
【期待する動作】何も起こらない
【実際の動作】バックキーの領域から指が出た時点でonBackPressed();が呼ばれる

  • 他のGoogle純正アプリを試してみたところ同様の動きになりました…
    当初の目的は達成できているかもしれません…

    そこで、質問の方針を若干変更させてください
    ①当記事に記載しているソースコードは
     「バックキーの長押し時の処理を通常押下時と同一」と言って良いか
    ②(①がYESの場合)より良い実装方法がありますよ!といったアドバイス
    -
  • (一人で勝手に騒いでいてお恥ずかしいです…投稿の削除は出来ないのでしょうか…)
    やはり本来の記事に記載している通り、
    自分が作成したコードは目的に達していないようです。
    それどころかonKeyLongPress()等のオーバーライドをしなくても
    最初からonBackPressed()だけでよいのではないかと思えてきました…。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。