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