首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Android上读取WebView中的数据?

如何在Android上读取WebView中的数据?
EN

Stack Overflow用户
提问于 2016-02-15 02:28:47
回答 1查看 17.8K关注 0票数 8

我有一个服务器,可以在浏览器上创建一个对象blob,我想在安卓应用程序的WebView中下载它。我尝试将请求重定向到浏览器实例,并使用下载管理器进行此操作,但两者似乎都不起作用(即使我在Chrome中打开相同的页面,下载操作也在那里工作)。

我尝试了以下代码,它会引发错误:

dat=blob:https%3A//111.111.111.111%3A8080/40b63131-63b1-4fa4-9451-c6297bbd111a“:找不到处理意图( act=android.intent.action.VIEW act=android.intent.action.VIEW)的活动

编辑

Android.content.ActivityNotFoundException:未发现处理意图的活动( act=android.intent.action.VIEW dat=blob:http://digitalinsensu.com/0f0d6127-a0f1-44c3-af85-72f648258d6d )

代码:

代码语言:javascript
代码运行次数:0
运行
复制
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);
}
});

这会引发java.lang.IllegalArgumentException:只能下载HTTP/HTTPS错误:

代码语言:javascript
代码运行次数:0
运行
复制
mWebView.setDownloadListener(new DownloadListener() {
    public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download");
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        dm.enqueue(request);

    }
});

我该怎么下载这个blob?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-12-23 10:55:19

在处理url单击时,您需要拦截回调,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        shouldOverrideUrlLoading(view, Uri.parse(url));
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return shouldOverrideUrlLoading(view, request.getUrl());
    }

    // legacy callback
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            return shouldOverrideUrlLoading(view, Uri.parse(url));
        }
        return super.shouldOverrideUrlLoading(view, url);
    }

    private boolean shouldOverrideUrlLoading(final WebView view, final Uri request) {
        if(request.getScheme().equals("blob")) {
            // do your special handling for blob urls here
            return true;
        }
    }
});

shouldOverrideUrlLoading()中,您可以进行特殊处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35400616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档