Android5.0 长按电源键关机没有弹确定对话框直接关机

Android5.0 长按电源键关机没有弹确定对话框直接关机,但用户点击了关机选项之后,应该弹一个确定对话框给用户提示是否真的进入关机模式。

首先在frameworks层将对话框的标志位打开。

frameworks\base\policy\src\com\android\internal\policy\impl\GlobalActions.java

       @Override
        public void onPress() {
            final boolean quickbootEnabled = Settings.System.getInt(
                    mContext.getContentResolver(), "enable_quickboot", 0) == 1;
            // go to quickboot mode if enabled
            if (quickbootEnabled) {
                startQuickBoot();
                return;
            }
            // shutdown by making sure radio and power are handled accordingly.
            mWindowManagerFuncs.shutdown(true /* confirm */);//20150423 show the power-off dialog
        }

源码中对于显示的字符串的处理是有逻辑的所以如果不做任何修改关机的时候弹出来的是重启的对话框。修改如下:

frameworks\base\services\core\java\com\android\server\power\ShutdownThread.java

static void shutdownInner(final Context context, boolean confirm) {
        // ensure that only one thread is trying to power down.
        // any additional calls are just returned
        synchronized (sIsStartedGuard) {
            if (sIsStarted) {
                Log.d(TAG, "Request to shutdown already running, returning.");
                return;
            }
        }

        boolean showRebootOption = false;
        String[] defaultActions = context.getResources().getStringArray(
                com.android.internal.R.array.config_globalActionsList);
        for (int i = 0; i < defaultActions.length; i++) {
            if (defaultActions[i].equals("reboot") && mReboot) {// if (defaultActions[i].equals("reboot")) {20150421 for power_off dialog
                showRebootOption = true;
                break;
            }
        }
        final int longPressBehavior = context.getResources().getInteger(
                        com.android.internal.R.integer.config_longPressOnPowerBehavior);
        int resourceId = mRebootSafeMode
                ? com.android.internal.R.string.reboot_safemode_confirm
                : (longPressBehavior == 2
                        ? com.android.internal.R.string.shutdown_confirm_question
                        : com.android.internal.R.string.shutdown_confirm);
        if (showRebootOption && !mRebootSafeMode) {
            resourceId = com.android.internal.R.string.reboot_confirm;
        }

        Log.d(TAG, "Notifying thread to start shutdown longPressBehavior=" + longPressBehavior);

        if (confirm) {
            final CloseDialogReceiver closer = new CloseDialogReceiver(context);
            if (sConfirmDialog != null) {
                sConfirmDialog.dismiss();
            }
            sConfirmDialog = new AlertDialog.Builder(context)
                    .setTitle(mRebootSafeMode
                            ? com.android.internal.R.string.reboot_safemode_title
                            : showRebootOption
                                    ? com.android.internal.R.string.reboot_title
                                    : com.android.internal.R.string.power_off)
                    .setMessage(resourceId)
                    .setPositiveButton(com.android.internal.R.string.yes,
                            new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            beginShutdownSequence(context);
                        }
                    })
                    .setNegativeButton(com.android.internal.R.string.no, null)
                    .create();
            closer.dialog = sConfirmDialog;
            sConfirmDialog.setOnDismissListener(closer);
            sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
            sConfirmDialog.show();
        } else {
            beginShutdownSequence(context);
        }
    }
时间: 2024-10-02 11:21:14

Android5.0 长按电源键关机没有弹确定对话框直接关机的相关文章

Android 长按电源键关机整个流程小学习

最近研究了一下android关机跟重新启动功能,看了一些长按电源键到弹出关机对话框,到真正关机的一系列处理过程. 首先还是来看看这个长按电源键都干了些什么吧?一般来说,电源键都是接到PMU上的,PMU来判断是长按还短按,当有按键消息产生的时候,系统会有中断,然后去读PMU的状态就可以知道是什么了.笔者以全志平台的AXP209小议一下,先贴上关键代码: static int axp_battery_event(struct notifier_block *nb, unsigned long eve

模拟长按电源键

事件注入 Android中的事件注入方式一共有三种:在Monkey源码浅谈的文章中,我们已经介绍过一种事件注入的方法,不过那种方法谷歌的限制比较严格,基本对我们做自动化没什么帮助:第二种是通过内部API的方式,由字面意思可知,只有Android应用程序才可以做到,并且这种方法只在本应用中生效,因此对我们来说也不是特别的理想:还有一种方法就是注入事件到设备/dev/input/eventX,本次我们介绍的sendevent方法,其实就是通过/dev/input/eventX来实现事件模拟的,学会了

【Android测试】【随笔】模拟长按电源键

起因 昨天群里看到有人问如何实现一个长按电源键的操作,这个问题经常遇到,而且对于新手来说也比较棘手,于是在尝试成功后,决定说说这个事情. 一般这样的需求都出现在自动化操作的过程中.但是一般的ui自动化貌似对长按操作都支持的不是特别好,即使有也是针对手机屏幕中的区域来进行长按,我们都知道电源键是一个实体键,无法通过点击ui来实现.说道这里估计很多人都想到了KEYCODE(“KEYCODE” 在[Android测试][第十二节]Uiautomator——API详解 中的Uidevice的API列举中

Android点击返回键back时弹出对话框Dialog

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { ExitDialog(MainActivity.this).show(); return true; } return super.onKeyDown(keyCode, event); } private Dialog ExitDialog

Win7关机时弹出对话框,提示你想要的信息

博主换了个公司,要求每天写日志,次日8点前没写的话就要扣钱,1篇10块钱,博主已经两次写完忘记提交到ERP系统了,捂脸... 因为公司要求所有工作在公司配的台式电脑上,所以如果能在关机前弹个提示(不关机或者显示器没关也要扣钱),显然可以很有效的shutdown博主这种智障行为. 思路是利用 win7 自带的开机.注销时可以添加脚本的功能.(win10家庭版是没有本地组策略编辑器的,所以以下的方法不适用win10) 步骤一. 新建记事本,命名为"写日志",写上:msgbox"今

android源码修改,实现长按电源键直接关机

版本:android 4.4.2 源文件路径:frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java 修改下面的代码: private final Runnable mPowerLongPress = new Runnable() { @Override public void run() { // The context isn't read if (mLongPressOnPowe

关于一条定制长按Power键弹出Dialog的需求

如题,需要定制长按Power键弹出的Dialog,UI上的大致效果是:全屏,中间下拉按钮“Swipe Down To Power Off”下拉关机,底部左右两侧“Reboot”,“Cancel”按钮,分别是重启,取消操作.并要求弹出Dialog的同时,背景渐变模糊,操作控件有相应动画效果,执行相应操作有同步动画,退出界面背景渐变至透明消失.设计效果酱紫: 具体控件动画要求就不再详述.主要两件事:1.关机流程,更准确的说应该是对长按Power键的处理:2.定制Dialog. 1.长按Power键,

android5.0以上对于APP_SWITCH和HOME键的处理

在android5.0项目开发遇到需要捕获HOME键的情况,经过查找,实现函数如下: 在framework/base/services/core/java/com/android/server/policy/PhoneWindowManager.java中添加如下函数: private boolean getTopStackActivity(String fullClassName){ ActivityManager am = (ActivityManager)mContext.getSyste

Android5.0系统的优缺点

Android L(5.0)正式定名为 Lollipop(棒棒糖).安卓已经六岁了,也总算有一次重大改观了.安卓5.0 Lollipop带来了全新的,扁平化的外观,更好的通知中心,重新设计的核心应用,并提升了在安卓设备上的性能表现--增加了一些以前所缺失的重要应用类别. 首先来看一下Android L相比之前的版本有什么新鲜的东西. 原文博客请参考:点击打开链接 一:自定义通知中心 Lollipop为用户带来了对通知中心前所未有的控制性,每一个应用程序都可以在通知中心进行单独的设置,并且只有在用