8 前兩天本人的妹妹qq空間留言說讓我做一個定時關(guān)機(jī)的應(yīng)用給她用,同時又有同班的女童鞋留言回復(fù)說也想要一個,頓時我斗志十足??!于是我去論壇百度了一下。。。
直接說結(jié)果吧!
目前有兩種解決辦法實(shí)現(xiàn)關(guān)機(jī)功能:
先說第一種,感覺第一種是最簡單實(shí)現(xiàn)的,調(diào)用系統(tǒng)隱藏的API!
Intent intent = Intent(Intent.ACTION_REQUEST_SHUTDOWN); intent.putExtra(Intent.EXTRA_KEY_CONFIRM, ); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
就是這么幾句話了,但是實(shí)際寫一下就會發(fā)現(xiàn),貌似沒有這個權(quán)限~!這就是隱藏的權(quán)限啦!
那么怎么使用隱藏API呢?
使用源碼編譯時生成的全編譯的jar包c(diǎn)lasses.jar
編譯Android框架源碼后,在源碼路徑下會生成out文件夾,在這個文件夾下的out"target"common"obj"JAVA_LIBRARIES"framework_intermediates"路徑下,會生成全編譯的jar庫classes.jar。你需要做的就是將這個jar庫導(dǎo)入到你的工程中。記住要把這個庫放在前面?。?!
你以為這樣就可以了?
你錯了,這才是第一步,關(guān)機(jī)還需要一個權(quán)限聲明:
但是加上了這個權(quán)限只后就會報錯,說你不是系統(tǒng)軟件,不可以有這個權(quán)限?。?!好吧!讓我扮演一下系統(tǒng)軟件吧?。檐浖嵘龣?quán)限)
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
……android:sharedUserId="android.uid.system"
……>
這樣就OK了!
下面就剩下最后一步了,什么?你以為這樣就可以了?這樣是不可以直接安裝調(diào)試,會報出簽名錯誤!
雖然不能運(yùn)行,但是可以生成APK,先生成APK,待用。。。
得到生成的APK之后用壓縮軟件解壓,把META-INF目錄中的CERT.SF、CERT.RSA 兩個文件刪除。使用android自帶的簽名工具signapk.jar 以及源碼中的platform.x509.pem,platform.pk8 對apk進(jìn)行重新簽名。在cmd下
執(zhí)行:java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk 執(zhí)行后new.apk即為簽名后的文件。
(注:執(zhí)行命令時所有文件這里放在同一目錄下,如果不在同一目錄請修改路徑)。
文件platform.x509.pem和platform.pk8我們可以在源碼的 build/target/product/security中找到。signapk.jar 可以編譯build/tools/signapk/ 得到。
然后就可以了?。?!
但是不要高興的太早,這樣生成的APK只能適用某些系統(tǒng)(與 你是用的相應(yīng)系統(tǒng)的platform.x509.pem和platform.pk8 文件有關(guān) )我用安卓原生系統(tǒng)的platform.x509.pem和platform.pk8 文件生成APK,在小米上就不好使。ok,第一種方法就先說到這吧!(以上內(nèi)容均來自百度,本人只是稍作總結(jié),本人才大三,也是第一次發(fā)帖,各位多捧場!)
|