禁用活动中的电源按钮

时间:2015-02-18 06:12:43

标签: android performance android-button android-hardware

我正在开发一个应用程序,其中要求不要让用户使用电源按钮锁定屏幕或关闭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

请提前帮助我。

3 个答案:

答案 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,它使得白痴打样的东西(在重新使用的设备上)不可能。