WebView setWebViewClient()与Facebook Live Stream = ActivityNotFoundException

时间:2017-02-06 17:18:39

标签: android facebook android-intent webview

我有一个简单的Facebook直播HTML的WebView:

<html>
    <head></head>
    <body>
        <iframe allowfullscreen="true" allowtransparency="true" frameborder="0" height="315" scrolling="no" src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fnico.up.9%2Fvideos%2F1895877650644648%2F&show_text=0&width=560" style="border:none;overflow:hidden" width="560"></iframe>
    </body>
</html>

我必须覆盖我的WebView的shouldOverrideUrlLoading()方法,所以设置一个像这样的WebViewClient:

webview.setWebViewClient(new WebViewClient()
{
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        if (url.contains("mydomain.com")) {
            //I must do something in my app, without to load url
        } else {
            //else i want open native Android browser
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getActivity().startActivity(browserIntent);
        }
        return true;//never to load the url in my webview
    }
});

问题是如果我有Facebook直播,我就崩溃了!

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=intent://video/?id={10155200044259063}&ref=m_embedded_video/ }

实际上,Facebook的iframe希望通过自定义uri意图在Facebook原生应用中打开直播://

我如何正确对待这个uri?!

在我的测试中:

  • 如果我不添加自定义WebViewClient(从不调用setWebViewClient()),它的工作就完美了!
  • 如果我没有开始新的活动并且我返回false,我没有崩溃,但我查看了iframe中的Chrome错误加载:ERR_UNKNOWN_URL_SCHEME!

最古怪的事情是:

  • 为什么我只添加这个简单的行:webview.setWebViewClient(new WebViewClient());我有ERR_UNKNOWN_URL_SCHEME,如果我删除了它的工作!!!?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

回答你的一个问题

  

为什么我只添加这个简单的行:webview.setWebViewClient(new WebViewClient());我有ERR_UNKNOWN_URL_SCHEME,如果我删除它&#39; s   工作!!!?

请注意,如果您不致电setWebViewClient(new WebViewClient()),则WebView的默认行为是启动处理网址的应用程序。否则,使用WebViewClient类实例设置客户端将在WebView对象中加载URL。

https://developer.android.com/guide/webapps/webview.html#HandlingNavigation

因此,如果您调用setWebViewClient(new WebViewClient()),则实际上正在执行类似于在false中返回shouldOverrideUrlLoading()的代码。因此,为您提供相同的ERR_UNKNOWN_URL_SCHEME错误。