Android:覆盖片段中的电源按钮

时间:2017-04-27 10:08:43

标签: android android-fragments keyevent

我正在处理我需要在按下时覆盖片段中的电源按钮的事情。我成功完成了此操作,然而,按下电源按钮时屏幕关闭。

我进行了快速搜索,发现了一些帖子,例如thisthisthis。有人说这是可行的,有些人则说没有。我的问题是,这是否可行?如果是这样,任何想法如何去做?

3 个答案:

答案 0 :(得分:1)

您可以使用它来阻止屏幕锁定

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

在片段中使用

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

使用BroadcastReceiver并侦听按下电源按钮时发送的android.intent.action.SCREEN_OFFIntent.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);
        }
    }