在我的应用程序中设置“android.uid.system”后,它无法访问SD卡?

时间:2011-07-13 12:38:38

标签: android android-emulator android-manifest

这是一个奇怪的问题。如果我没有为其设置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。非常感谢你。

5 个答案:

答案 0 :(得分:5)

请阅读:link1

link2

答案 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