我正在开发一个应用程序,其中要求不要让用户使用电源按钮锁定屏幕或关闭Android设备,所以我必须禁用电源按钮并骑过电源按钮功能,我在互联网上搜索了很多,但找不到任何东西。我已经使用了这两段代码,但它仍然不适用于我。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Log.i("", "Dispath event power");
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
return true;
}
return super.dispatchKeyEvent(event);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Back
moveTaskToBack(true);
return true;
}
else {
// Return
请提前帮助我。
答案 0 :(得分:1)
您无法在任何Android应用中处理Power事件。 Events of
电源按钮are handled in Framework level in Android architecture
。 您无法停止framework
发送活动但接受其发送。您可以从框架接收事件调度的结果,但不会阻止该过程。
答案 1 :(得分:0)
您无法阻止用户控制他的手机,您可能会阻止该设备进入sleeping or locking itself。 但是,如上所述here
,可以使用电源按钮答案 2 :(得分:0)
我也有这个问题。这个链接很有帮助: "Overriding The Power Button"
我的问题是让相机应用程序意外停止,所以我的回答与Bob的回答略有不同。我简单地回忆起现有的事件。所以,换句话说,这适用于我的应用程序:(放入BroadcastReceiver:
public class ScreenReceiver extends BroadcastReceiver
与我不同的代码段是:
//-------------------------------------------------------------
// POWER BUTTON - SHORT click
// We are moving from a SCREEN ON state to a SCREEN OFF State
//--------------------------------------------------------------
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
{
wasScreenOn = false;
if (cameraIsOn)
{
PowerManager newPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = newPM.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "TEST");
wakeLock.acquire();
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent ExistingIntent = intent;
PendingIntent pi = PendingIntent.getActivity(context, 0, ExistingIntent, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 10, pi);
}
return;
}
还在做测试,但这似乎对我有用。 (我还必须监视摄像机记录状态,因为当屏幕熄灭时,摄像机会停止。我重新启动它 - 当然,有些视频会丢失。看起来,似乎没有生根设备,停止发生是不可能的事。)
一方面,我理解为什么可以调用电源开关来关闭设备。 OTOH,它使得白痴打样的东西(在重新使用的设备上)不可能。