首页 文章

WebView setWebViewClient()与Facebook Live Stream = ActivityNotFoundException

提问于
浏览
1

我有一个简单的Facebook Live Stream 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本机应用中打开直播://

How I can treat this uri correctly ?!

在我的测试中:

  • 如果我完全没有工作的话!

  • 如果我没有启动新的Activity并且我返回false,我没有崩溃,但我查看了iframe中的Chrome错误加载:ERR_UNKNOWN_URL_SCHEME!


最古怪的事情是:

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

谢谢您的帮助 .

1 回答

  • 0

    回答你的一个问题

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

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

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

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

相关问题