Он не может получить доступ к SD-карте после установки «android.uid.system» в моем приложении? - PullRequest
4 голосов
/ 13 июля 2011

Это странная проблема.Мое приложение может успешно получить доступ к SD-карте, если я не установил android.uid.system.Но после установки android.uid.system мое приложение не может получить доступ к SDCard.В это время имеет место исключение: 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 в манифест.И я написал LOCAL_CERTIFICATE := platform в файле make.Кто может объяснить эту странную проблему.После установки 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 ]

5 голосов
/ 14 июля 2011

Пожалуйста, прочитайте это: ссылка1

и эта ссылка2

0 голосов
/ 29 июня 2015

Вы можете увидеть в 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(), поэтому приложение с системным uid не сможет получить доступ к sdcard, если вы не взломали aosp.

0 голосов
/ 29 июня 2013

android.uid.system заставляет ваше приложение привязывать систему, но sdcard также отслеживается системой, и если ваше приложение удаляет это, оно может получить доступ к sdcard.кажется,

удалите эту строку в вашем XML-файле: android: sharedUserId = "android.uid.system" ystem

0 голосов
/ 13 июля 2011

Использование: File share = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"test.txt");

Это не сработает: File share = new File("/mnt/sdcard", "test.txt");

0 голосов
/ 13 июля 2011

Используйте Environment.getExternalStorageDirectory().getAbsolutePath(), чтобы получить путь, НЕ "/mnt/sdcard"

...