我正在处理我需要在按下时覆盖片段中的电源按钮的事情。我成功完成了此操作,然而,按下电源按钮时屏幕关闭。
我进行了快速搜索,发现了一些帖子,例如this,this和this。有人说这是可行的,有些人则说没有。我的问题是,这是否可行?如果是这样,任何想法如何去做?
答案 0 :(得分:1)
您可以使用它来阻止屏幕锁定
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
在片段中使用
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
使用BroadcastReceiver并侦听按下电源按钮时发送的android.intent.action.SCREEN_OFF
或Intent.ACTION_SCREEN_OFF
(并且屏幕已开启)。我认为由于安全问题,无法覆盖电源按钮。
答案 1 :(得分:0)
你在做什么是不可取的。但是,您可以编写广播接收器然后屏幕被锁定,使用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();
}
答案 2 :(得分:-2)
您无法覆盖电源按钮功能,但是您可以使用以下功能阻止系统长按电源按钮显示对话框。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(!hasFocus) {
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
}
}