Невозможно загрузить файл - java, менеджер загрузок, API 28 - PullRequest
0 голосов
/ 20 января 2020

За последние 48 часов я пытаюсь это решить, я прошел через ряд примеров ... и до сих пор ничего. Я пытаюсь добавить в свое приложение загрузку одного файла - позже он будет запущен RabbitMQ, но в настоящее время - для целей тестирования я хотел бы сделать это с помощью buttonClick, в приведенном ниже примере я пропустил любые дополнительные параметры (такие как Description, Название et c. ...). После щелчка я получаю информацию о том, что Download Manager не смог загрузить файл, конечно же, файл существует по ссылке (я могу загрузить его без проблем из браузера телефона).

public void downloadFile2(View view) {
            if(PermissionCheck.readAndWriteExternalStorage(this)) {
                DownloadManager downloadmanager = (DownloadManager)this.getSystemService(this.DOWNLOAD_SERVICE);
                Uri uri = Uri.parse("http://xxxxxx/File1.pdf");
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setVisibleInDownloadsUi(true);
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"/File1.pdf");
                downloadmanager.enqueue(request);
            }
        }

Среда. DIRECTORY_DOWNLOADS - я пробовал несколько загрузок каталогов, но ни одна не работала setDestinationInExternalPublicDir (у меня есть попытка laso setDestinationInExternalFilesDir - не повезло

package com.example.majap;

    import android.Manifest;
    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.support.v4.app.ActivityCompat;

    public class PermissionCheck {
        public static boolean readAndWriteExternalStorage(Context context) {
            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
                return false;
            } else {
                return true;
            }
        }
    }

И, конечно, в манифесте есть (даже для много)

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

1 Ответ

0 голосов
/ 22 января 2020

Через 4 дня и 28 кофе - я нашел решение:

<application
....
android:usesCleartextTraffic="true"

начиная с Android 8 - HTTP-трафик в незашифрованном виде c не разрешен

...