问题描述: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来签名。