安卓按键顺序检测触发隐藏入口的实现方式

需求场景:在AndroidTv上隐藏式调出不开放给用户的开发模式或者工厂模式。

思路:在设置或者特定的页面下,按指定顺序按下遥控按键触发。

封装类如下:

import android.util.Log;
import android.view.KeyEvent;

/***
 * LankyBin 2022.08.19
 * 隐藏入口
 * 组合顺序按键调用隐藏动作
 */
public class HiddenEntrance {
    private final String TAG = this.getClass().getSimpleName();
    private final int[] mPassword;

    public HiddenEntrance(int[] password) {
        mPassword = password;
    }

    private OnPasswordCheckedListener mListener = new OnPasswordCheckedListener() {
        @Override
        public void onPasswordChecked(boolean passed) {
            Log.d(TAG, "onPasswordChecked: " + passed + " TO DO?");
        }
    };
    private int mPwdNo = 0;

    public boolean checkPassword(int keyCode) {
        boolean ret = false;
        if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
            return false;
        }
        if (keyCode == mPassword[mPwdNo]) {
            ++mPwdNo;
        } else {
            mPwdNo = 0;
        }
        if (mPwdNo == mPassword.length) {
            ret = true;
            mPwdNo = 0;
        }
        mListener.onPasswordChecked(ret);
        return ret;
    }

    public void setOnPasswordCheckedListener(OnPasswordCheckedListener listener) {
        mListener = listener;
    }

    public interface OnPasswordCheckedListener {
        void onPasswordChecked(boolean passed);
    }
}

调用方式demo:

    private static final int[] PASSWORD = {
            KeyEvent.KEYCODE_DPAD_UP,
            KeyEvent.KEYCODE_DPAD_LEFT,
            KeyEvent.KEYCODE_MENU,
            KeyEvent.KEYCODE_DPAD_DOWN,
            KeyEvent.KEYCODE_DPAD_RIGHT
    };

    private final HiddenEntrance mHiddenEntrance = new HiddenEntrance(PASSWORD);

    @Override
    protected void onResume() {
        mHiddenEntrance.setOnPasswordCheckedListener(new HiddenEntrance.OnPasswordCheckedListener() {
            @Override
            public void onPasswordChecked(boolean passed) {
                if (passed) {
                    Log.d(TAG, "onPasswordChecked: todo");
                    //做你想做的事
                }
            }
        });
        super.onResume();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {

            mHiddenEntrance.checkPassword(keyCode);

        }
        return super.onKeyDown(keyCode, event);
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值