首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接到Android中的电源按钮?

如何连接到Android中的电源按钮?
EN

Stack Overflow用户
提问于 2010-09-14 01:58:50
回答 9查看 79K关注 0票数 32

在Android设备上,唯一的按钮是音量按钮和电源按钮,我想让应用程序对电源按钮(长按和短按)做出反应。这是怎么做的?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-09-15 15:29:02

解决方案:

代码语言:javascript
复制
@Override
public 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);
}
票数 8
EN

Stack Overflow用户

发布于 2012-04-28 23:57:56

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

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

代码语言:javascript
复制
<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />

要处理短按和长按,请将以下覆盖添加到activity类中:

代码语言:javascript
复制
@Override
public 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);
}

@Override
public 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()调用执行操作。

我认为下一部分仅适用于Cyanogenmod。如果PREVENT_POWER_KEY常量是未定义的,那么您不应该需要它。

要开始截取电源键,您需要在活动中设置以下标志:

代码语言:javascript
复制
getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);

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

代码语言:javascript
复制
getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);

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

票数 41
EN

Stack Overflow用户

发布于 2010-09-14 02:08:28

在您的活动中添加:

代码语言:javascript
复制
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
        // do what you want with the power button
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

不过..。这种钥匙不知何故很特别。不确定它是否会给你带来问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3703071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档