Android 10 如何定制关机或者重新启动的对话框

在这里插入图片描述
代码路径:

frameworks/base/core/res/res/values/symbols.xml
frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java

在ShutdownThread.java文件中shutdownInner方法中定制我们UI

--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -17,6 +17,12 @@
 
 package com.android.server.power;
 
+
+import android.widget.TextView;
+import android.widget.ImageView;
+import android.view.View;
+import android.view.LayoutInflater;
+import android.view.View.OnClickListener;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.IActivityManager;
@@ -228,26 +234,66 @@ public final class ShutdownThread extends Thread {
                 sInstance.mThemeResId = AlertDialog.THEME_DEVICE_DEFAULT_LIGHT;
             }
 
-            sConfirmDialog = new AlertDialog.Builder(context, sInstance.mThemeResId)
-                    .setTitle(mRebootSafeMode
-                            ? com.android.internal.R.string.reboot_safemode_title
-                            :(mReboot
-                            ? com.android.internal.R.string.reboot_device_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)
+			sConfirmDialog = new AlertDialog.Builder(context)
+//          sConfirmDialog = new AlertDialog.Builder(context, sInstance.mThemeResId)
+//                    .setTitle(mRebootSafeMode
+//                            ? com.android.internal.R.string.reboot_safemode_title
+//                            :(mReboot
+//                            ? com.android.internal.R.string.reboot_device_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();
+			
+			LayoutInflater inflater = LayoutInflater.from(context) ;
+            View view = inflater.inflate(com.android.internal.R.layout.shoutdown_thread_dialog, null) ;
+            TextView tvTitle = (TextView) view.findViewById(com.android.internal.R.id.tv_dialog_title);
+            TextView tvContent = (TextView) view.findViewById(com.android.internal.R.id.tv_dialog_content);
+            ImageView ivYes = (ImageView) view.findViewById(com.android.internal.R.id.iv_dialog_yes);
+            ImageView ivNo = (ImageView) view.findViewById(com.android.internal.R.id.iv_dialog_no);
+            tvTitle.setText(mRebootSafeMode
+                    ? com.android.internal.R.string.reboot_safemode_title
+                    :(mReboot
+                    ? com.android.internal.R.string.reboot_device_title
+                    : com.android.internal.R.string.power_off));
+            tvContent.setText(resourceId);
+            sConfirmDialog.setView(view);
+            WindowManager.LayoutParams attrs = sConfirmDialog.getWindow().getAttributes();
+            attrs.setTitle("ShutdownDialog");
+            sConfirmDialog.getWindow().setAttributes(attrs);
+            sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY);
+            sConfirmDialog.getWindow().setBackgroundDrawableResource(com.android.internal.R.drawable.ic_shoutdown_thread_dialog_bg);
+
+            ivYes.setOnClickListener(new OnClickListener() {
+
+                @Override
+                public void onClick(View v) {
+                    beginShutdownSequence(context);
+                    if (sConfirmDialog != null) {
+                        sConfirmDialog.dismiss();
+                    }
+                }});
+            ivNo.setOnClickListener(new OnClickListener() {
+
+                @Override
+                public void onClick(View v) {
+                    if (sConfirmDialog != null) {
+                        sConfirmDialog.dismiss();
+                    }
+                }});
             closer.dialog = sConfirmDialog;
             sConfirmDialog.setOnDismissListener(closer);
-            sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
             sConfirmDialog.show();
+            sConfirmDialog.getWindow().setLayout(480,276);
         } else {
             beginShutdownSequence(context);
         }

注意事项:
1、在framework下添加资源文件,在xml里面定义的ID以及图片,我们必须在symbols.xml文件中先定义,如果不定义就会报错
2、在framework下添加资源文件,需要先进入项目根目录 cd frameworks/base/core/res/ 执行mm命令, 编译 framework-res.apk
3、编译完后com.android.internal.R中会生成资源的引用。
在目录frameworks/base/ 下执行mm 编译 framework.jar
如果 frameworks/base/services 下有修改,则也要编译
frameworks/base/services/java/ 执行mm 编译 services.jar
4、执行如下命令,重启设备

adb remount

adb push framework-res.apk /system/framework/

adb push framework.jar /system/framework/

adb push services.jar /system/framework/ (如果有修改的话)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值