問題描述: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來簽名。