使用Android下载提供程序下载文件

时间:2011-11-04 02:34:44

标签: android webview download

我正在尝试使用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”权限。

1 个答案:

答案 0 :(得分:0)

您是否拥有在清单中写入SD卡的权限?