#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» добавьте это в манифест в теге приложения