2015-06-06 3 views
0
  • Мое устройство коренится
  • целевой аудитории (если приложение является общим) будет коренится устройства только

Я пытаюсь немного настроить другое приложение, изменение некоторых файлов изображений. Поэтому цель состоит в том, чтобы просто переписать крошечные JPG файлов (по одному за раз, как требуется)Android Запись файла в другую папку приложения

/data/data/com.otherapp/files/somefile.jpg, например, должно быть перезаписаны

p = Runtime.getRuntime().exec("su"); уже работать, прежде чем я попробовал метод записи.

Я также добавил Runtime.getRuntime().exec("chmod 077 " +myFile.getAbsolutePath()); до написания кода, как предложено на аналогичный вопрос

я получаю доступ запрещен. java.io.FileNotFoundException: /data/data/com......jpg: open failed: EACCES (Permission denied)

Код записи у меня есть:

//myDir is /data/data/com....... 
    File myFile = new File (myDir.getAbsolutePath(), fname); 
    try { 
     //myFile.createNewFile();//tried with and without this 
     FileOutputStream out = new FileOutputStream(myFile); 
     btbmp.compress(Bitmap.CompressFormat.JPEG, 60, out); 
     out.flush(); 
     out.close(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 

Как я могу это сделать?

+0

Такая же задача, записываемая на SD-карту, вообще не проблема. 'uses-permission и т. д. все правильно настроены' – Onimusha

+0

из того, что я знаю, одно приложение не может получить доступ к приватным файлам приложения другого приложения (например, в каталоге установки) –

+0

@SkarosIlias да, как правило, невозможно, но с корнем он может, поскольку другие ответы заявили об этом но без информации о 'how to' – Onimusha

ответ

2

Хорошо это заняло весь день, но я достиг желаемого результата, таким образом:

  • Создать файл на SD-карте
  • Затем скопируйте файл в корневой назначения

src_file = "somefile/on/sdcard.jpg"

dest_file = "/data/data/com.anotherapp/files/abcde.jpg" - путь с использованием контекста

try { 
     Process process = Runtime.getRuntime().exec("su"); 

     DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
     os.writeBytes("rm "+dest_file + "\n"); //removes destination file -might not be required - haven't tested 
     os.flush(); 
     os.writeBytes("cat "+src_file+" > "+dest_file + "\n"); 
     os.flush(); 
     os.writeBytes("exit\n"); 
     os.flush(); 

     // Waits for the command to finish. 
     process.waitFor(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

Примечание В некоторых случаях мне приходилось chmod корневую папку 777 для ее работы. Я уверен, что это не очень хорошая практика, и это означает, что приложение, использующее эту папку, возможно, не сможет получить к нему доступ. В моем случае это произошло до тех пор, пока я не исправлю его с помощью ES Explorer

Смежные вопросы