我正在尝试使用webview在我的应用程序中下载电子邮件附件。 我按照默认浏览器应用程序的步骤进行如下操作: 1)编写实现DownloadListener的MyWebViewClient并覆盖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”设置值,并在程序通过DownloadProvider.java的checkInsertPermissions函数时设置“destination”,该函数使用enforceAllowedValues来检查这些值。我无法将目的地放在我想下载的外部SD卡上。我看到默认的Android浏览器没有设置“is_public_api”和“destination”的值(请参阅BrowserActivity.java)。这对默认浏览器有什么用?如果我没有为这些值设置值,那么我会得到安全异常。
我在清单中设置了“android.permission.ACCESS_DOWNLOAD_MANAGER”权限。
答案 0 :(得分:0)
您是否拥有在清单中写入SD卡的权限?