这是一个奇怪的问题。如果我没有为其设置android.uid.system
,我的应用程序可以成功访问SD卡。但是在设置android.uid.system
之后,我的应用程序无法访问SD卡。目前,例外情况发生在07-13 09:11:24.999: INFO/System.out(9986): create file happen exception--->java.io.IOException: Permission denied
。我检查我在正确的地方写了正确的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />.
因为在我的应用程序中使用forceStopPackage
,我需要将android.uid.system
添加到清单中。我在make文件中写了LOCAL_CERTIFICATE := platform
。谁能解释这个奇怪的问题。设置android.uid.system
后,我的应用程序属于系统进程,该进程应该有更多权限来访问SD卡。这是我的想法。以下是我的代码:
public void setPackage(String dir){
System.out.println( "setPackage dir=="+dir );
File share=new File("/mnt/sdcard","test.txt");
if(!share.exists()){
try{
share.createNewFile();
}catch(Exception e){
System.out.println( "creat file happen exception--->" +e.toString() );
}
}
try{
if(share!=null){
System.out.println( "create file is not null" );
FileOutputStream fops=new FileOutputStream(share);
fops.write(dir.getBytes());
fops.flush();
fops.close();
}
}catch(Exception e){
System.out.println( "write Exception-->" +e.toString() );
}
}
我的应用程序在模拟器上运行,目标版本为2.3。非常感谢你。
答案 0 :(得分:5)
答案 1 :(得分:0)
使用Environment.getExternalStorageDirectory().getAbsolutePath()
获取路径,而不是"/mnt/sdcard"
答案 2 :(得分:0)
使用:File share = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"test.txt");
这不起作用:File share = new File("/mnt/sdcard", "test.txt");
答案 3 :(得分:0)
你可以在android源代码中看到:frameworks \ base \ core \ java \ android \ os \ Environment.java,它有一个函数:
private static void throwIfSystem() {
if (Process.myUid() == Process.SYSTEM_UID) {
Log.wtf(TAG, "Static storage paths aren't available from AID_SYSTEM", new Throwable());
}
}
此函数将被称为getExternalStorageDirectory()
,因此如果您不破解aosp,则系统uid的应用程序无法访问SD卡。
答案 4 :(得分:-1)
android.uid.system使你的应用程序绑定系统,但系统也观察到sdcard,然后如果你的应用程序删除了它,它就可以访问sdcard。看来好像
删除xml文件中的这一行:android:sharedUserId =“android.uid.system”ystem