android关机菜单修改,Android4.4关机菜单添加重启系列选项

本来以为挺简单的修改,没想到花了一天的时间,在此记录下修改过程

首先,定义几个字符串,重启,正在重启....

/frameworks/base/core/res/res/values/strings.xml

/frameworks/base/core/res/res/values-zh-rCN/strings.xml

两个文件中分别添加定义:

Reboot

Safe Mode

"Rebooting..."

重启

重启到安全模式

"正在重启..."

光在这里定义完是没用的,之后你在Java代码中引用会报错,所以还要在

/frameworks/base/core/res/res/values/public.xml文件中添加声明

到这里你以为声明完了么?我以为声明完了,结果到快编译完时又报错,根据提示,需要在

/frameworks/base/api/current.txt文件中声明API接口,我这不是外部应用,为毛要声明?那就继续添加呗

查找public static final class R.string {声明,添加定义

field public static final int global_action_power_reboot = 17039384; // 0x1040018

field public static final int global_action_power_safemode = 17039385; // 0x1040019

field public static final int reboot_progress = 17039386; // 0x104001a

这些字符串的ID是搜索没有定义的ID然后自己编写上去的,可根据情况进行修改,但在public.xml跟current.txt中保持一致

做完这些才算定义完....

修改代码:

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

1. 导入需要的包

import java.io.File;

import java.io.FileWriter;

import android.os.PowerManager;

import java.io.IOException;

找到函数

private GlobalActionsDialog createDialog()

在mItems = new ArrayList();后面进行添加

// 2016-03-03 14:43:58 添加重启菜单

mItems.add(

new SinglePressAction(

com.android.internal.R.drawable.stat_notify_sync,

R.string.global_action_power_reboot) {

public void onPress() {

// 重启

PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);

pm.reboot(null); // 调用PowerManager类中的reboot方法

}

public boolean showDuringKeyguard() {

return true;

}

public boolean showBeforeProvisioning() {

return true;

}

});

// 2016-03-03 14:49:03 添加重启到安全模式

mItems.add(

new SinglePressAction(

com.android.internal.R.drawable.ic_print_error,

R.string.global_action_power_safemode) {

public void onPress() {

// 重启到安全模式

mWindowManagerFuncs.rebootSafeMode(true);

}

public boolean onLongPress() {

// 长按重启到Recovery

recoveryMode(mContext);

return true;

}

public boolean showDuringKeyguard() {

return true;

}

public boolean showBeforeProvisioning() {

return true;

}

});其中的图片资源使用系统现有的,没有另外进行添加,从添加字符串可以想到添加个图片资源也不省心,干脆用现有的资源好了

到这里要说改完了么?功能都已经实现了,不过关机时显示的是正在关机,这多少有些差强人意了,那么就修改

/frameworks/base/services/java/com/android/server/power/ShutdownThread.java文件

查找private static void beginShutdownSequence(Context context)函数

// 修改这段代码

ProgressDialog pd = new ProgressDialog(context);

pd.setTitle(context.getText(com.android.internal.R.string.power_off));

pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));

pd.setIndeterminate(true);

pd.setCancelable(false);

pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

// 修改后

ProgressDialog pd = new ProgressDialog(context);

if (mReboot){

pd.setTitle(context.getText(com.android.internal.R.string.global_action_power_reboot));

pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));

}

else{

pd.setTitle(context.getText(com.android.internal.R.string.power_off));

pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));

}

pd.setIndeterminate(true);

pd.setCancelable(false);

pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);这样重启时就会显示正在重启进度框了.

要说为什么之前不直接使用ShutdownThread.reboot方法呢?开始也用了,但是提示未定义错误,引用com.android.server.power.ShutdownThread也没用,

最后使用了PowerManager接口了....

PS: 我就知道Android不会这么弱,是我太菜....

自定义的字符不需要在public.xml跟current.txt中声明,

到文件:/frameworks/base/core/res/res/values/symbols.xml中进行声明即可

也不用自定义ID什么的,就这么简单,图片也可以自定义....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值