涉及到的源码(4.0)
ics/frameworks/base/policy/src/com/android/internal/policy/impl/目录下:PhoneWindowManager.javaGlobalActions.javaics/frameworks/base/core/java/com/android/internal/app/目录下:ShutdownThread.java


1,跟踪Power键的长按事件,定位到弹出关机Dialog的源码是在PhoneWindowManager.java中
继续跟踪代码找到Runnable mPowerLongPress = new Runnable(),在该runnable里边调用showGlobalActionsDialog()方法便是显示长按power键弹出的关机提示对话框,如果你的机器是原生态的,默认提示“飞行模式”,“静音”和“关机”选项。
showGlobalActionsDialog创建关机对话框的代码在GlobalActions.java里边,主要代码如下:
private AlertDialog createDialog() {  ……  mItems = new ArrayList<Action>();            // first: power off          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.                      ShutdownThread.shutdown(mContext, true);                  }                    public boolean showDuringKeyguard() {                      return true;                  }                    public boolean showBeforeProvisioning() {                      return true;                  }              });   [color=red] mItems.add(            new SinglePressAction(                    com.android.internal.R.drawable.ic_lock_power_off,                    R.string.global_action_reboot) {                public void onPress() {                    // shutdown by making sure radio and power are handled accordingly.                    ShutdownThread.reboot(mContext, true);                }                public boolean showDuringKeyguard() {                    return true;                }                public boolean showBeforeProvisioning() {                    return true;                }            });[/color]        // next: airplane mode          mItems.add(mAirplaneModeOn);            // last: silent mode          if (SHOW_SILENT_TOGGLE) {              mItems.add(mSilentModeAction);          }  ……  } 

如上,加入红色部分代码,由于ShutdownThread中已经有了reboot函数。
当然要在values/strings.xml中加入
    <string name="global_action_reboot">重启</string>      <string name="reboot_progress">"正在重启..."</string>

reboot方法的后两个参数解释如下:
reason 如果值为是null,正常重启;如果是recovery,系统重启进入recovery mode
confirm true显示关机提示框,需要用户【确认】;false不显示提示框,直接关机

2,另外一个问题是提示框的问题
在ShutdownThread.java的beginShutdownSequence(context)中加入对是否为reboot的判断:
……  if(mReboot){     // reboot progress           pd.setTitle(context.getText(com.android.internal.R.string.global_action_reboot));           pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));       }else{          // shutdown progress           pd.setTitle(context.getText(com.android.internal.R.string.power_off));           pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));       }  ……  


3,编译
注意顺序
最后编译
因为修改涉及到系统资源文件又涉及到policy.jar包,所以按照以下顺序:
步骤1.编译frameworks/base/res,在out/target/product/X设备名X/system/framework/目录下生成framework-res.apk
步骤2.编译frameworks/base/,在out同样目录下生成framework.jar包(不能忽略,不然步骤3编译报错)
步骤3.编译frameworks/base/policy,在同样目录下生成policy.jar包

更多相关文章

  1. 去掉非首次开机的优化过程都会有'Android正在升级'的提示
  2. android 3des加密Access restriction: The constructor SunJCE()
  3. Android定制--------自定义关机时间
  4. Mac无法编译android
  5. ubuntu 10.10下面编译android 4.0 出错
  6. Android(安卓)源码
  7. android ndk编译getevent
  8. Gradle依赖总结
  9. Ionic Html5编译IOS Android原生应用

随机推荐

  1. 仅需6步,教你轻易撕掉app开发框架的神秘面
  2. java Android(安卓)回调机制的详解
  3. Android(安卓)Add外部library工程,总是链
  4. TouchPad 可以跑 Android,eBay 上就買得到
  5. Android中直播视频技术探究之---基础知识
  6. 使用xml布局菜单
  7. Android(安卓)一个可以自由定制外观、支
  8. Android(安卓)通过 JNI 调用 Java 类的构
  9. 电脑怎么安装安卓系统?安卓(Android)x86 4
  10. Android指纹识别API讲解