Firefly开源社区
标题:
【Android定制】定制设备重启功能
[打印本页]
作者:
ZZP
时间:
2014-11-11 17:29
标题:
【Android定制】定制设备重启功能
本帖最后由 ZZP 于 2014-11-11 17:37 编辑
定制设备【重启】功能,需要确认两个问题:
1、关机对话框代码路径,如何添加【重启】选项
2、设备重启执行方式
带着以上两个问题,分别在Android源代码中进行跟踪消化:
针对问题1:
在源码
frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java
中,里边定义了【关机】【静音】【飞行模式】等全局功能选项,其被实例化使用位于同目录下的
PhoneWindowManager
的
showGlobalActionsDialog
方法中,该方法被调用正是响应Power按键长按事件(
mPowerLongPress
)。
添加【重启】选项直接在GlobalActions中,参照【关机】选项代码格式添加即可。
G
lo
balActions中添加代码:
+ mItems.add(
+ new SinglePressAction(
+ com.android.internal.R.drawable.ic_lock_power_off,
+ R.string.factorytest_reboot) {
+
+ public void onPress() {
+ // mWindowManagerFuncs.reboot(true);
+ // reboot
+ mWindowManagerFuncs.reboot(true);
+ }
+
+ public boolean onLongPress() {
+ return true;
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+ });
针对问题2:
回到GlobalActions中,先了解到【关机】功能是执行代码【
mWindowManagerFuncs.shutdown(true);
】,接下来进一步跟踪代码WindowManagerFuncs类,发现其为接口WindowManagerPolicy(路径【
frameworks/base/core/java/android/view/WindowManagerPolicy.java
】)中定义,其接口实现类在WindowManagerService(路径【
frameworks/base/services/java/com/android/server/wm/WindowManagerService.java
】,简称WMS)中实现。
在WMS中,shutdown方法和rebootSafeMode方法的实现类如下:
@Override
public void shutdown(boolean confirm) {
ShutdownThread.shutdown(mContext, confirm);
}
// Called by window manager policy. Not exposed externally.
@Override
public void rebootSafeMode(boolean confirm) {
ShutdownThread.rebootSafeMode(mContext, confirm);
}
复制代码
在这里了解到这些方法实际上是已经封装在ShutdownThread(路径【
frameworks/base/services/java/com/android/server/power/ShutdownThread.java
】)中,进一步查阅代码发现ShutdownThread类除了上边提到的关机和重启安全模式方法外,还有封装了重启(reboot)方法:
public static void reboot(final Context context, String reason, boolean confirm) {
mReboot = true;
mRebootSafeMode = false;
mRebootReason = reason;
shutdownInner(context, confirm);
}
复制代码
显而易见,这里可以用同样的方式将reboot方法添加到WindowManagerFuncs接口中,与关机方法一样进一步在WMS中进行引用封装,具体代码添加如下:
接口WindowManagerPolicy.java中修改:
public interface WindowManagerFuncs {
...
public void shutdown(boolean confirm);
public void rebootSafeMode(boolean confirm);
+ public void reboot(boolean confirm);
+ public void reboot(String reason, boolean confirm);
...
}
WMS中实现重启方法:
+ // Called by window manager policy. Not exposed externally.
+ @Override
+ public void reboot(boolean confirm) {
+ reboot(null, confirm);
+ }
+
+ // Called by window manager policy. Not exposed externally.
+ @Override
+ public void reboot(String reason,boolean confirm) {
+ ShutdownThread.reboot(mContext, reason, confirm);
+ }
screen.png
(314.4 KB, 下载次数: 611)
下载附件
2014-11-11 17:27 上传
作者:
暴走的阿Sai
时间:
2014-11-11 17:36
支持原创帖子
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1