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