长按电源键,为Android手机添加自动重启Item
2014-09-10 09:43
567 查看
http://blog.csdn.net/wjky2014/article/details/24123533
修改Framwork层源码添加重启效果如下 : 仿照关机代码写重启效果
修改实现的方法如下:
frameworks/base/core/res/res/drawable-ldpi/ic_lock_reboot.png
frameworks/base/core/res/res/drawable-mdpi/ic_lock_reboot.png
/frameworks/base/core/res/res/drawable-xhdpi/ic_lock_reboot.png
图标如下:
[html] view
plaincopy
<string name="reboot_confirm" product="tablet">Your phone will reboot.</string>
<string name="reboot_confirm" product="default">Your phone will reboot.</string>
<string name="reboot_confirm_question">Do you want to reboot?</string>
<string name="reboot">Reboot</string>
支持中文修改路径:
[html] view
plaincopy
<string name="reboot">重新启动</string>
<string name="reboot_confirm" product="tablet">您的手机将会重新启动.</string>
<string name="reboot_confirm" product="default">您的手机将会重新启动.</string>
<string name="reboot_confirm_question">您要重新启动吗?</string>
[java] view
plaincopy
// first: power off 这个是关机的item
mItems.add(
new SinglePressAction(
com.android.internal.R.drawable.ic_lock_power_off,
R.string.global_action_power_off) {
public void onPress() {
// shutdown by making sure radio and power are handled accordingly.
mWindowManagerFuncs.shutdown(true);
}
public boolean onLongPress() {
mWindowManagerFuncs.rebootSafeMode(true);
return true;
}
public boolean showDuringKeyguard() {
return true;
}
public boolean showBeforeProvisioning() {
return true;
}
});
//----------------------添加重启的item add start
mItems.add(
new SinglePressAction(
com.android.internal.R.drawable.ic_lock_reboot,
R.string.global_action_reboot) {
public void onPress() {
// shutdown by making sure radio and power are handled accordingly.
mWindowManagerFuncs.reboot(true);
}
public boolean onLongPress() {
return true;
}
public boolean showDuringKeyguard() {
return true;
}
public boolean showBeforeProvisioning() {
return true;
}
}); // add end
[java] view
plaincopy
public void shutdown(boolean confirm);
public void reboot(boolean confirm); // add this line
public void rebootSafeMode(boolean confirm);
[java] view
plaincopy
// 关机
public void shutdown(boolean confirm) {
ShutdownThread.shutdown(mContext, confirm);
}
//add start 添加从其方法
public void reboot(boolean confirm) {
ShutdownThread.reboot(mContext,"", confirm);
}
// Called by window manager policy. Not exposed externally.
//进入安全模式
public void rebootSafeMode(boolean confirm) {
ShutdownThread.rebootSafeMode(mContext, confirm);
}
修改ShutdownThread 类中的shutdownInner方法 共3个修改点
[java] view
plaincopy
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;
}
}
Log.d(TAG, "Notifying thread to start radio shutdown");
bConfirmForAnimation = confirm;
final int longPressBehavior = context.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior);
int resourceId = mRebootSafeMode // -----------modify ------delete final
? 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);
Log.d(TAG, "Notifying thread to start shutdown longPressBehavior=" + longPressBehavior);
if(mReboot) resourceId = com.android.internal.R.string.reboot_confirm; //------------add this line
if (confirm) {
final CloseDialogReceiver closer = new CloseDialogReceiver(context);
if (sConfirmDialog != null) {
sConfirmDialog.dismiss();
}
//if (sConfirmDialog == null) { //-----------------------modify this line
Log.d(TAG, "PowerOff dialog doesn't exist. Create it first");
sConfirmDialog = new AlertDialog.Builder(context)
.setTitle(mRebootSafeMode
? com.android.internal.R.string.reboot_safemode_title
: (mReboot?com.android.internal.R.string.reboot:com.android.internal.R.string.power_off))//modify this line .添加判断重启
.setMessage(resourceId)
.setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
beginShutdownSequence(context);
if (sConfirmDialog != null) {
sConfirmDialog = null;
}
}
})
.setNegativeButton(com.android.internal.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
synchronized (sIsStartedGuard) {
sIsStarted = false;
}
if (sConfirmDialog != null) {
sConfirmDialog = null;
}
}
})
.create();
sConfirmDialog.setCancelable(false);//blocking back key
sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
/*if (!context.getResources().getBoolean(
com.android.internal.R.bool.config_sf_slowBlur)) {
sConfirmDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
}*/
/* To fix video+UI+blur flick issue */
sConfirmDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
// } //-------------------modify this line
closer.dialog = sConfirmDialog;
sConfirmDialog.setOnDismissListener(closer);
if (!sConfirmDialog.isShowing()) {
sConfirmDialog.show();
}
} else {
beginShutdownSequence(context);
}
}
[plain] view
plaincopy
field public static final int ic_lock_power_off = 17301552; // 0x1080030
field public static final int ic_lock_reboot = 17301662; // 0x108009e
[html] view
plaincopy
<public type="drawable" name="ic_lock_reboot" id="0x0108009e" />
[html] view
plaincopy
<java-symbol type="string" name="reboot" />
<java-symbol type="string" name="reboot_confirm" />
<java-symbol type="string" name="global_action_reboot" />
修改Framwork层源码添加重启效果如下 : 仿照关机代码写重启效果
修改实现的方法如下:
1.添加重新启动的图标 分别适应 高清 高 中 低 4 种不同的分辨率 路径如下
frameworks/base/core/res/res/drawable-hdpi/ic_lock_reboot.pngframeworks/base/core/res/res/drawable-ldpi/ic_lock_reboot.png
frameworks/base/core/res/res/drawable-mdpi/ic_lock_reboot.png
/frameworks/base/core/res/res/drawable-xhdpi/ic_lock_reboot.png
图标如下:
2.准备一下重启提示语的字符串
支持英语修改路径:frameworks/base/core/res/res/values/strings.xml[html] view
plaincopy
<string name="reboot_confirm" product="tablet">Your phone will reboot.</string>
<string name="reboot_confirm" product="default">Your phone will reboot.</string>
<string name="reboot_confirm_question">Do you want to reboot?</string>
<string name="reboot">Reboot</string>
支持中文修改路径:
[html] view
plaincopy
<string name="reboot">重新启动</string>
<string name="reboot_confirm" product="tablet">您的手机将会重新启动.</string>
<string name="reboot_confirm" product="default">您的手机将会重新启动.</string>
<string name="reboot_confirm_question">您要重新启动吗?</string>
3.为弹出的对话框添加一个重启的item
修改路径如下:frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java[java] view
plaincopy
// first: power off 这个是关机的item
mItems.add(
new SinglePressAction(
com.android.internal.R.drawable.ic_lock_power_off,
R.string.global_action_power_off) {
public void onPress() {
// shutdown by making sure radio and power are handled accordingly.
mWindowManagerFuncs.shutdown(true);
}
public boolean onLongPress() {
mWindowManagerFuncs.rebootSafeMode(true);
return true;
}
public boolean showDuringKeyguard() {
return true;
}
public boolean showBeforeProvisioning() {
return true;
}
});
//----------------------添加重启的item add start
mItems.add(
new SinglePressAction(
com.android.internal.R.drawable.ic_lock_reboot,
R.string.global_action_reboot) {
public void onPress() {
// shutdown by making sure radio and power are handled accordingly.
mWindowManagerFuncs.reboot(true);
}
public boolean onLongPress() {
return true;
}
public boolean showDuringKeyguard() {
return true;
}
public boolean showBeforeProvisioning() {
return true;
}
}); // add end
4.添加重启的方法 仿照关机跟进入安全模式的方法写重启方法
修改路径: frameworks/base/core/java/android/view/WindowManagerPolicy.java[java] view
plaincopy
public void shutdown(boolean confirm);
public void reboot(boolean confirm); // add this line
public void rebootSafeMode(boolean confirm);
5.实现重启reboot的方法
添加路径如下:frameworks/base/services/java/com/android/server/wm/WindowManagerService.java[java] view
plaincopy
// 关机
public void shutdown(boolean confirm) {
ShutdownThread.shutdown(mContext, confirm);
}
//add start 添加从其方法
public void reboot(boolean confirm) {
ShutdownThread.reboot(mContext,"", confirm);
}
// Called by window manager policy. Not exposed externally.
//进入安全模式
public void rebootSafeMode(boolean confirm) {
ShutdownThread.rebootSafeMode(mContext, confirm);
}
6.重启方法调用线程实现
修改路径:frameworks/base/services/java/com/android/server/power/ShutdownThread.java修改ShutdownThread 类中的shutdownInner方法 共3个修改点
[java] view
plaincopy
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;
}
}
Log.d(TAG, "Notifying thread to start radio shutdown");
bConfirmForAnimation = confirm;
final int longPressBehavior = context.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnPowerBehavior);
int resourceId = mRebootSafeMode // -----------modify ------delete final
? 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);
Log.d(TAG, "Notifying thread to start shutdown longPressBehavior=" + longPressBehavior);
if(mReboot) resourceId = com.android.internal.R.string.reboot_confirm; //------------add this line
if (confirm) {
final CloseDialogReceiver closer = new CloseDialogReceiver(context);
if (sConfirmDialog != null) {
sConfirmDialog.dismiss();
}
//if (sConfirmDialog == null) { //-----------------------modify this line
Log.d(TAG, "PowerOff dialog doesn't exist. Create it first");
sConfirmDialog = new AlertDialog.Builder(context)
.setTitle(mRebootSafeMode
? com.android.internal.R.string.reboot_safemode_title
: (mReboot?com.android.internal.R.string.reboot:com.android.internal.R.string.power_off))//modify this line .添加判断重启
.setMessage(resourceId)
.setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
beginShutdownSequence(context);
if (sConfirmDialog != null) {
sConfirmDialog = null;
}
}
})
.setNegativeButton(com.android.internal.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
synchronized (sIsStartedGuard) {
sIsStarted = false;
}
if (sConfirmDialog != null) {
sConfirmDialog = null;
}
}
})
.create();
sConfirmDialog.setCancelable(false);//blocking back key
sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
/*if (!context.getResources().getBoolean(
com.android.internal.R.bool.config_sf_slowBlur)) {
sConfirmDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
}*/
/* To fix video+UI+blur flick issue */
sConfirmDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
// } //-------------------modify this line
closer.dialog = sConfirmDialog;
sConfirmDialog.setOnDismissListener(closer);
if (!sConfirmDialog.isShowing()) {
sConfirmDialog.show();
}
} else {
beginShutdownSequence(context);
}
}
7.添加新的API接口
修改路径:frameworks/base/api/current.txt[plain] view
plaincopy
field public static final int ic_lock_power_off = 17301552; // 0x1080030
field public static final int ic_lock_reboot = 17301662; // 0x108009e
8.对所用到的资源进行声明 (这个是Android 4.1版本中的)
修改路径:frameworks/base/core/res/res/values/public.xml[html] view
plaincopy
<public type="drawable" name="ic_lock_reboot" id="0x0108009e" />
9.以上修改好后,需要对所用到的资源进行声明
修改路径:frameworks/base/core/res/res/values/symbols.xml[html] view
plaincopy
<java-symbol type="string" name="reboot" />
<java-symbol type="string" name="reboot_confirm" />
<java-symbol type="string" name="global_action_reboot" />
相关文章推荐
- 长按电源键,为Android手机添加自动重启Item
- 长按电源键,为Android手机添加自动重启Item
- 为android电源键添加重启项
- 使用Java让android手机自动执行重复重启
- android edittext在输入手机号码的时候自动添加分隔符
- 为android电源键添加重启项
- Android 5.1长按电源键添加重启功能
- Android 5.1长按电源键添加重启功能
- 如何重启Android手机
- 为android程序添加版本自动更新功能(转+详细分析) -转自eoeandroid
- android 为 ListView Item中的组件添加事件 以及更新数据
- android 为 ListView Item中的组件添加事件 以及更新数据
- android中ListView在划屏到底部的时候动态添加ListView的Item实现
- Android中ListView的item中添加图片和文字
- Android 实现图片的自动缩放,适应分辨率不同的手机
- android手机时间自动同步
- Android 添加重启
- Android程序禁止手机自动锁屏和屏幕翻转的
- 基于android手机的3G+GPS远程控制模型车工程-电路改装2-电源改造与模块的连接
- android桌面快捷方式添加 删除 更新 自动运行