Java
Android
AndroidStudio
RE:CODEDay 2

Androidアプリで音量キーを使ったロックパターンを作ってみた。Fragment編

More than 1 year has passed since last update.

音量ボタンを使って、5秒以内にコマンドを打ち込むとロックが解除されるコードを書きました。

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {

    //音量変更時のコマンドの初期化
    mCommandTime = 0;
    mSuccessCommand = "";

    final View v = inflater.inflate(R.layout.fragment_recording, container, false);

    v.setOnKeyListener(new View.OnKeyListener() {
      @Override
      public boolean onKey(View v, int keyCode, KeyEvent event) {


        if (mCommandTime==0) {
          //一回押されたら5秒後にmCommandTimeが0にリセットされるまではtimerが起動しない
          mCommandTime++;

          final Handler handler = new Handler();
          handler.postDelayed(new Runnable() {
            @Override
            public void run() {
              Log.d(TAG, "5秒経ったからopenPassを初期化");
              mSuccessCommand = "";
              //タイマーがonの時だけ値を文字列(mSuccessCommand)に追加できる
              Log.d(TAG, "5秒経過したからtimerを起動できる");
              mCommandTime= 0;
            }
          }, 5000);

        }else{
          Log.d(TAG,"comandTimeが"+mCommandTime+"で、5秒をすぎてるからtimerは使えない");
        }

        if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP){
          mSuccessCommand=mSuccessCommand+"1";
          Log.d(TAG,"Commandに+1、今のcommandは"+mSuccessCommand);


        }else if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
          mSuccessCommand=mSuccessCommand+"0";
          Log.d(TAG,"Commandに+0、今のcommandは"+mSuccessCommand);

        }

        if (mSuccessCommand.equals("01101")) { 
          Log.i(TAG,"life コマンドが解除された");

          Toast.makeText(getActivity(), "ロックが解除されました。", Toast.LENGTH_SHORT).show();

          //ここでロック解除時の処理をする
      }
    });
    // View#setFocusableInTouchModeでtrueをセットしておくこと、重要
    v.setFocusableInTouchMode(true);
    return v;
  }
}

ここには書いてないんですが、KeyEventは「Down」と「Up」の2回呼ばれるので、「Down」の時だけ入るif文とかを作るといいです。

個人的には、

今後SNSとかを作ってく中で、音量ボタンのロック解除でアプリの透明具合とか調整したいなーって思ってます。楽しそー