为了账号安全,请及时绑定邮箱和手机立即绑定

如何连接到Android中的Power按钮?

如何连接到Android中的Power按钮?

BIG阳 2019-07-10 15:52:25
如何连接到Android中的Power按钮?在Android设备上,只有音量按钮和电源按钮,我想让应用程序对按下电源按钮(长和短)做出反应。这是怎么做的?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

现有的答案并没有完全回答这个问题,并且遗漏了足够的细节,如果没有更多的调查,它们就无法发挥作用。我会分享我在解决这个问题上所学到的。

首先,需要向清单文件添加以下权限:

<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />

要处理短的和长的按压,请将以下重写添加到活动类中:

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...
        event.startTracking(); // Needed to track long presses
        return true;
    }
    return super.onKeyDown(keyCode, event);}@Overridepublic boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...
        return true;
    }
    return super.onKeyLongPress(keyCode, event);}

注意:值得注意的是,onKeydown()将在onKeyLongPress之前触发多次,因此您可能希望触发onKeyUp()或其他逻辑,以防止在用户实际按住onKeydown()时对一系列onKeydown()调用采取行动。

我认为下一部分只适用于CyanogenMod。 如果防止电源键常数是未定义的,所以您不应该需要它。

要开始拦截电源密钥,需要从活动中设置以下标志:

getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);

若要停止拦截电源密钥(允许标准功能),请执行以下操作:

getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);

如果您愿意,可以在程序中反复地在这两种模式之间来回切换。


查看完整回答
反对 回复 2019-07-10
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

解决办法:

@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
        Intent i = new Intent(this, ActivitySetupMenu.class);
        startActivity(i);
        return true;
    }

    return super.dispatchKeyEvent(event);}


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 705 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信