我正在开发一个应用程序,我需要在按下电源按钮时执行操作,但不幸的是,当按下电源按钮时,我无法按下电源按钮的动作。我尝试使用onKeyDown()和dispatchKeyEvent()方法,但似乎没有任何工作。任何人都可以建议我解决这个问题的任何其他方法或解决方案。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
// The action I want to perform when power button is pressed.
return true;
}
return super.onKeyDown(keyCode, event);
}
和
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Intent i = new Intent(this, NewActivity.class);
startActivity(i);
return true;
}
return super.dispatchKeyEvent(event);
}
答案 0 :(得分:6)
我找到了答案,这可以通过使用带有PowerManager的AlarmManager
来完成@Override
public void onReceive(Context context, Intent intent) {
if ((intent.getAction().equals(Intent.ACTION_SCREEN_OFF))) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.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 inten = new Intent(context,NewActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, inten, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 100, pi);
}
}
// Finish your WakeLock HERE. call this method after U put the activity in front or when u exit from the new activity.
public void finishWakeLocker(){
if (wakeLock != null)
wakeLock.release();
}
首先屏幕熄灭然后我使用AlarmManager唤醒它。我无法通过覆盖电源按钮控件来停止屏幕进入关闭状态。我只是在它进入睡眠状态时立即唤醒它。
答案 1 :(得分:2)
幸运的是,除非通过自定义固件,否则这是不可能的。
答案 2 :(得分:0)
我不知道您打算做什么,但您可以使用BroadcastReceiver
并听取按下电源按钮时发送的android.intent.action.SCREEN_OFF
或Intent.ACTION_SCREEN_OFF
(和屏幕)是的)。
不幸的是,当屏幕超时时,也会发送此意图。但我认为你可以阻止手机被锁定(在应用程序中),就像这样
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);