BugFix 4: External Storage can't write

問題描述:Android上做錄音,將錄音文件保存在sdcard.需要對external storage可寫。但是程序卻報錯,因爲external storage不可寫。

原因:已在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

但是仍然未獲得external storage的寫權限。找了半天,發現網上有說明是因爲我的程序加入了系統進程的原因。

AndroidManifest.xml有:

android:sharedUserId="android.uid.system"這個屬性

同時還在Android.mk中加了:

LOCAL_CERTIFICATE := platform

以上兩步使得我的apk運行在系統進程中,而系統進程不可對external storage寫操作(不知道爲什麼)。所以導致我無法write external storage.

更改:將AndroidManifest.xml中的android:sharedUserId="android.uid.system"這個屬性去掉,同時不要LOCAL_CERTIFICATE := platform這個簽名。

關於加入系統進程的說明

http://www.cnblogs.com/Tiger-Dog/articles/2057917.html

首先加入android:sharedUserId="android.uid.system"這個屬性。通過Shared User id,擁有同一個User id的多個APK可以配置成運行在同一個進程中。那麼把程序的UID配成android.uid.system,也就是要讓程序運行在系統進程中,這樣就 有權限來修改系統時間了。 
只是加入UID還不夠,如果這時候安裝APK的話發現無法安裝,提示簽名不符,原因是程序想要運行在系統進程中還要有目標系統的platform key,就是上面第二個方法提到的platform.pk8和platform.x509.pem兩個文件。用這兩個key簽名後apk才真正可以放入系 統進程中。第一個方法中加入LOCAL_CERTIFICATE := platform其實就是用這兩個key來簽名。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章