日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android4.2添加重启菜单项

發布時間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android4.2添加重启菜单项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要是針對android4.2關機菜單添加重啟功能




A.關機提示
android4.2/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java

?

[java]?view plaincopy
  • private?void?handleShow()?{??
  • ?????//?本函數不需要修改...??
  • ?????awakenIfNecessary();??
  • ?????mDialog?=?createDialog();??
  • ?????prepareDialog();??
  • ?????WindowManager.LayoutParams?attrs?=?mDialog.getWindow().getAttributes();??
  • ?????attrs.setTitle("GlobalActions");??
  • ?????mDialog.getWindow().setAttributes(attrs);??
  • ?????mDialog.show();//?關機選擇對話框??
  • ??
  • ?????mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);??
  • ??
  • ?????/****************?
  • ?
  • ??????如果只需要關機確認可以修改為:?
  • ??????awakenIfNecessary();?
  • ??????mWindowManagerFuncs.shutdown(true);?
  • ?
  • ?????*******************/??
  • ?}??

  • ?? 關機選項菜單 找到createDialog() 賦值power off那一項,? 修改關機為:? ?????? mWindowManagerFuncs.reboot(true); [java]?view plaincopy
  • private?GlobalActionsDialog?createDialog()?{??
  • ????????????....//?省略??
  • ????????????//?first:?power?off??
  • ????????????mItems.add(??
  • ????????????????....//?省略??
  • ???????????????});??
  • /??
  • ????????????//?second:reboot??添加這一項????
  • ????????????try?{//?添加try?catch?為了避免錯誤...??
  • ???????????????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.??
  • ????????????//????????????????????mWindowManagerFuncs.rebootSafeMode(true);??
  • ???????????????????????//????mWindowManagerFuncs.reboot(mContext,null,false);??
  • ???????????????????????//????ShutdownThread.reboot(mContext,null,false);??
  • ???????????????????????????try?{??
  • ???????????????????????????????mWindowManagerFuncs.reboot(true);??
  • ???????????????????????????}?catch?(Exception?e)?{??
  • ???????????????????????????????//?TODO:?handle?exception??如果有問題,?最好在這里打印一些信息看看是不是這里出問題了??
  • ???????????????????????????}??
  • ??
  • ???????????????????????}??
  • ??
  • ???????????????????????public?boolean?showDuringKeyguard()?{??
  • ???????????????????????????return?true;??
  • ???????????????????????}??
  • ??
  • ???????????????????????public?boolean?showBeforeProvisioning()?{??
  • ???????????????????????????return?true;??
  • ???????????????????????}??
  • ???????????????????????????});??
  • ????????????????????????}?catch?(Exception?e)?{??
  • ???????????????????????????//?TODO:?handle?exception????
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????????<pre?name="code"?class="java">??????????????/??

  • ?........//省略 B. 1)??? android4.2/frameworks/base/core/java/android/view/WindowManagerPolicy.java??? 找到WindowManagerFuncs這個interface的定義,增加如下function的聲明: [java]?view plaincopy
  • public?interface?WindowManagerFuncs?{??
  • ??
  • ????public?void?reboot(boolean?confirm);??
  • ??
  • }??
  • ?
    ??? 2)
    ??? android4.2/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java

    ??? 找到shutdown()函數,在其后面添加reboot()函數,函數內容如下:

    [java]?view plaincopy
  • //?Called?by?window?manager?policy.?Not?exposed?externally.??
  • ??
  • @Override??
  • ??
  • public?void?reboot(boolean?confirm)?{??
  • ??
  • ????ShutdownThread.reboot(mContext,?confirm);??
  • ??
  • }??


  • C. 修改關機時的進度框提示

    ????? android4.2/frameworks/base/services/java/com/android/server/power/ShutdownThread.java

    ? [java]?view plaincopy
  • /*/?
  • ?//修改前:?
  • ?……?
  • ??pd.setTitle(context.getText(com.android.internal.R.string.power_off));?
  • ??pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));?
  • ?……?
  • ?/*/??
  • ?//修改后:??
  • ?……??
  • ?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));??
  • ??????}??
  • ?……??
  • ?//*/??


  • D.? 重啟詢問對話框?? // 這部分可能代碼不一樣? 不過都是修改shutdownInner函數里面的sConfirmDialog這個dialog的

    ? [cpp]?view plaincopy
  • shutdownInner(final?Context?context,?boolean?confirm)//???
  • ??????if(Settings.Global.getInt(context.getContentResolver(),?Settings.Global.DEVICE_PROVISIONED,?1)==1?&&??
  • ??????????SystemProperties.getBoolean("ro.sys.bootfast",?false)){??
  • ??????????????......??
  • ??????????????//?這部分可能代碼不一樣??不過都是修改sConfirmDialog這個dialog的??
  • ??????????????if(mReboot){??
  • ??????????????????idBootMode?=?com.android.internal.R.string.reboot_confirm_question;??
  • ??????????????}else{??
  • ??????????????????idBootMode?=?com.android.internal.R.string.shutdown_confirm_question;??
  • ??????????????}??
  • ??????????????sConfirmDialog?=?new?AlertDialog.Builder(context)??
  • ??????????????????.setTitle(mReboot??
  • ????????????????????????com.android.internal.R.string.global_action_reboot??
  • ??????????????????????:?com.android.internal.R.string.power_off)??
  • ??????????????????.setMessage(idBootMode)??
  • ??????????????????.setPositiveButton(com.android.internal.R.string.yes,?new?DialogInterface.OnClickListener()?{??
  • ??????????????????public?void?onClick(DialogInterface?dialog,?int?which)?{??
  • ??????????????????????if(mPolicy!=null)??
  • ??????????????????????????mPolicy.acquireBAView();??
  • ??????????????????????beginShutdownSequence(context);??
  • ??????????????????}??
  • ??????????????????})??
  • ??????????????????.setNegativeButton(com.android.internal.R.string.no,?null)??
  • ??????????????????.create();??
  • ??
  • ?????????????}??
  • ??? /說明? 無關? 只做注釋///
    ? ? ? ? ? ? ? // 下面這個函數會殺死所有的activity, 桌面不能殺死"com.android.launcher", 否則就會導致關機的時候顯示開機動畫
    ????????????? private? void killRemoveActivity(Context context)

    ???? /end說明///???????

    ????

    F. 重啟功能實現了,但是不能到此結束,定制Android系統的重啟功能,添加選項和修改重啟提示框時加入了“重啟”和“正在重啟”的字符串,
    ?? 所以會涉及到在系統資源文件中添加新的字符串,
    ?? 源碼中資源文件涉及到的多國語言直接忽略,我只在values/strings.xml和values-zh-rCN/strings.xml兩個文件中加入對應的字符串:

    ??? 路徑: framework/base/core/res/res/valuse/?? or? framework/base/core/res/res/values-zh-rCN/

    ? 上面是拷貝別人的,? 實際上我發現如果不在symbols.xml添加相關的字符串信息,? 編譯會報錯的,? 故應該在framework/base/core/res/res/valuse/ symbols.xml參考其他的把自己的添加上:

    [html]?view plaincopy
  • strings.xml:??
  • ?????<string?name="reboot_confirm_question">"Do?you?want?to?reboot?"</string>??
  • ?????<string?name="global_action_reboot">"Reboot"</string>??
  • ?????<string?name="reboot_progress">"Rebooting..."</string>??
  • ??
  • ?symbols.xml??
  • ?????<java-symbol?type="string"?name="reboot_confirm_question"?/>??
  • ?????<java-symbol?type="string"?name="global_action_reboot"?/>??
  • ?????<java-symbol?type="string"?name="reboot_progress"?/>??


  • E.最后編譯
    因為修改涉及到系統資源文件又涉及到policy.jar包,經過多次嘗試,正確的編譯順序如下:
    步驟1.編譯frameworks/base/res,在out/target/product/X設備名X/system/framework/目錄下生成framework-res.apk
    步驟2.編譯frameworks/base/,在o同樣目錄下生成framework.jar包(不能忽略,不然步驟3編譯報錯)
    步驟3.編譯frameworks/base/services/java/???? 生成services.jar

    步驟4.編譯frameworks/base/policy,在同樣目錄下生成android.policy.jar 包



    參考:?

    http://blog.csdn.net/zzp16/article/details/7829063

    http://www.2cto.com/kf/201403/288710.html

    總結

    以上是生活随笔為你收集整理的android4.2添加重启菜单项的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。