Я пытаюсь использовать 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» в моем манифесте.