2016-10-18 3 views
1

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

Мой вопрос: так как у меня есть доступ к суперпользователю на моем корневом устройстве, как можно редактировать мою функцию, чтобы я мог загрузить внешний файл на SD-карте без запроса разрешения от пользователя?

здесь функция Я использую, чтобы обновить приложение:

public class UpdateAppZ extends AsyncTask<String,Void,Void>{ 
    private Context context; 
    public void setContext(Context contextf){ 
     context = contextf; 
    } 

    @Override 
    protected Void doInBackground(String... arg0) { 
     try { 
      URL url = new URL(arg0[0]); 
      HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
      c.setRequestMethod("GET"); 
      c.setDoOutput(true); 
      c.connect(); 

      String PATH = "/mnt/sdcard/Download/"; 
      File file = new File(PATH); 
      file.mkdirs(); 
      File outputFile = new File(file, "update.apk"); 
      if(outputFile.exists()){ 
       outputFile.delete(); 
      } 
      FileOutputStream fos = new FileOutputStream(outputFile); 

      InputStream is = c.getInputStream(); 

      byte[] buffer = new byte[1024]; 
      int len1 = 0; 
      while ((len1 = is.read(buffer)) != -1) { 
       fos.write(buffer, 0, len1); 
      } 
      fos.close(); 
      is.close(); 

      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.fromFile(new File("/mnt/sdcard/Download/update.apk")), "application/vnd.android.package-archive"); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error! 
      context.startActivity(intent); 


     } catch (Exception e) { 
      Log.e("UpdateAPP", "Update error! " + e.getMessage()); 
     } 
     return null; 
    } 
} 

и называют:

UpdateAppZ atualizaApp = new UpdateAppZ();  
          atualizaApp.setContext(getApplicationContext()); 
           atualizaApp.execute("http://85.118.98.251/misho/app-debug.apk"); 
+0

Каков ваш инструмент построения, целевой и скомпилированный SDK-версия? – Radhey

+0

buildToolsVersion '23 .0.3' minSdkVersion 19 targetSdkVersion 23 эта функция хорошо работает до 6.0, но мне нужно, чтобы изменить его, чтобы он мог работать на 6.0 также –

+0

Почему не халявные это в файл приложения реж? вам не нужно делать публикацию apk. – crgarridos

ответ

1

Нет, вы не можете сделать это с Android 6.0 Вы должны задать для опасных разрешений на во время выполнения.

Поскольку Если устройство работает под управлением Android 6.0 (уровень API 23) или выше, и targetSdkVersion в приложение является 23 или выше, операционная система будет обеспечивать приложение для запроса разрешений от пользователя во время выполнения.

Погода у вас есть доступ к корню или нет.

Источник:
https://developer.android.com/guide/topics/security/permissions.html https://developer.android.com/training/permissions/index.html

1

Скачать в getExternalFilesDir(). В других приложениях нет доступа.

+2

Это совершенно неправильно ... – crgarridos

+1

Согласно документам: Начиная с KITKAT, для чтения или записи на возвращаемый путь не требуется никаких разрешений, он всегда доступен вызывающему приложению, это относится только к путям, генерируемым для имени пакета вызывающего приложения. Для доступа к путям, принадлежащим другим пакетам, WRITE_EXTERNAL_STORAGE и/или READ_EXTERNAL_STORAGE. – Radhey

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