【问题标题】:Invoking video player application on Kindle Fire directly from WebView直接从 WebView 调用 Kindle Fire 上的视频播放器应用程序
【发布时间】:2012-11-21 01:55:08
【问题描述】:

在我的应用程序中,我有一个 WebView,可用于显示 www.youtube.com 或 m.youtube.com 内容。我在 onLoadResource 回调中有以下代码:

@Override
public void onLoadResource (WebView view, String url)
{
    if(matchYouTubeWatchUrl(url))
    {
        invokeYouTubePlayer(m_context,url);
    }
}

invokeYouTubePlayer 函数如下所示:

private static void invokeYouTubePlayer(Context c, String url)
{
    try
    {
        Uri uri = Uri.parse(url);
        String videoId = uri.getQueryParameter("v");
        if(videoId != null)
        {
            Intent youtubeIntent = new Intent(Intent.ACTION_VIEW);
            youtubeIntent.setData(Uri.parse("vnd.youtube://"+videoId));
            try
            {
                c.startActivity(youtubeIntent);
            }
            catch(ActivityNotFoundException e)
            {
                Log.e(TAG,"No handler for native youtube - expanding scope");
                // Try an alternate approach if there's no youtube app installed
                youtubeIntent = new Intent(Intent.ACTION_VIEW);
                youtubeIntent.setData(Uri.parse("http://www.youtube.com/watch?v="+videoId));
                try
                {
                    c.startActivity(youtubeIntent);
                }
                catch(ActivityNotFoundException e2)
                {
                    e2.printStackTrace();
                }
            }
        }
    }
    catch(NullPointerException e)
    {
        e.printStackTrace();
    }        
 }

我发现,在大多数 Android 设备上,第一个 startActivity 调用调用 YouTube 应用程序,但在 KF 上,我看到的是它调用浏览器,然后调用视频播放器应用程序。

我自己没有 KF,我想知道是否有一个 URI 可以传递给 startActivity,它将直接调用 Kindle Fire 上的视频播放器,而无需通过浏览器作为中间步骤。

【问题讨论】:

    标签: android kindle-fire


    【解决方案1】:

    只是一个观察。有更好的方法来检测是否可以调用 Intent

    private boolean isCallable(Intent intent) {
            List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
                PackageManager.MATCH_DEFAULT_ONLY);
            return list.size() > 0;
    }
    

    好吧,明确一下 KF,它从不触发第一个活动,然后触发第二个,然后 KF 接管并将您带到 YouTube 应用程序。

    如果是这样,我只能认为您在第一个 Intent 中的详细信息不正确,或者对于 KF,它与其他手机/标签中的不同

    【讨论】:

    • 非常感谢该代码示例。是的,KF 的问题在于其意图与其他具有内置 youtube 应用程序的 android 设备不同。
    • 您可以尝试将 kindle 插入并查看 logcat 以查看单击 youtube 应用程序时会调用什么...
    • 是的,如果我有一个,我会这样做。不幸的是,我没有,我可以访问的 logcat 也没有这些信息。
    猜你喜欢
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多