Загрузка файлов с помощью провайдера загрузок Android - PullRequest
1 голос
/ 04 ноября 2011

Я пытаюсь использовать webview для загрузки вложения электронной почты в моем приложении. Я следую процедуре, которой придерживается приложение браузера по умолчанию, как показано ниже: 1) Написать MyWebViewClient, который реализует DownloadListener и переопределить onDownloadStart. webview вызывает setDownloadListener, передавая экземпляр MyWebViewClient 2) Чтобы скачать, я создаю экземпляр ContentValues, заполняя значения следующим образом:

    ContentValues values = new ContentValues();
    values.put("uri", webAddress.toString());
    values.put("cookiedata", cookies);
    values.put("useragent", userAgent);
    values.put("notificationpackage",
           getPackageName());
    values.put("notificationclass",
            DownloadReceiver.class.getCanonicalName());

    values.put("visibility", 0);
    values.put("mimetype", mimetype);
    values.put("hint", filename);
    values.put("description", webAddress.mHost);
    values.put("is_public_api", Boolean.TRUE);
    values.put("destination", 4);
    if (contentLength > 0) {
        values.put("total_bytes", contentLength);
    }        

    final Uri contentUri =
            getContentResolver().insert(Uri.parse("content://downloads/my_downloads"), values);

Обратите внимание, что, поскольку я не могу импортировать android.provider.Downloads, я должен предоставить фактические строковые значения из Downloads.java, как указано выше. Каким-то образом загрузка не работает с этим кодом. Кроме того, мне пришлось поставить значение для «is_public_api», а также установить «назначение», поскольку программа проходит через функцию checkInsertPermissions в DownloadProvider.java, которая использует forceceAllowedValues ​​для проверки этих значений. Я не могу поместить назначение на внешнюю SDCard, где я хотел бы скачать. Я вижу, что браузер Android по умолчанию не устанавливает значения для "is_public_api" и "destination" (см. BrowserActivity.java). Как это работает для браузера по умолчанию? Если я не выставлю значения для этих значений, я получу исключение безопасности.

У меня есть разрешение «android.permission.ACCESS_DOWNLOAD_MANAGER» в моем манифесте.

1 Ответ

0 голосов
/ 04 ноября 2011

У вас также есть разрешения на запись на SD-карту, установленные в вашем манифесте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...