Как загрузить любой файл с сервера в определенном месте в Android 10?

#java #android #kotlin #android-10.0

#java #Android #kotlin #android-10.0

Вопрос:

Мой код для загрузки файла с сервера отлично работает на уровне API 28 и ниже, но он не работает на уровне API 29.

 private fun downloadV(url: String) {
    val fileName = System.currentTimeMillis().toString()   ".mp4"
    val downloaduri = Uri.parse(url)
    val request = DownloadManager.Request(downloaduri)
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
    request.setAllowedOverRoaming(false)
    request.setTitle(fileName)
    request.setDescription(fileName)
    request.setDestinationInExternalPublicDir("/XYZ", fileName)
    request.allowScanningByMediaScanner()
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
    downloadManager?.enqueue(request)
}
  

Комментарии:

1. Вы забыли сказать, почему ваш код не подходит для SDK 30. Пожалуйста, сообщите об исключении и сообщении. Посмотрите в Logcat.

2. "XYZ" нет общедоступного каталога, поэтому его нельзя использовать для установки назначения в Android 10 и 11. Но вы могли бы указать downloadmanager для загрузки в Download/XYZ или, например, Pictures /XYZ. Папка XYZ будет создана менеджером.

Ответ №1:

Добавьте эту строку в манифест в теге приложения

 requestLegacyExternalStorage="true" 
  

Ответ №2:

Проверьте этот документ один разhttps://developer.android.com/training/data-storage/shared/documents-files#grant-access-directory

или попробуйте предоставить разрешение времени выполнения для хранения

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    }
  

Комментарии:

1. разрешения уже предоставлены перед началом загрузки

2. android: usescleartextraffic=»true» добавьте это в манифест в теге приложения