直接从WebView在Kindle Fire上调用视频播放器应用程序

时间:2012-05-09 08:39:04

标签: android kindle-fire

在我的应用程序中,我有一个可用于显示www.youtube.com或m.youtube.com内容的WebView。我在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上的视频播放器,而不必通过浏览器作为中间步骤。< / p>

1 个答案:

答案 0 :(得分:1)

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

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

好的只是为了清楚KF它从未触发第一个活动然后它会触发第二个然后KF接管并带你到YouTube应用程序。

如果是这样我只能想到你在第一个意图中的详细信息不正确或KF与其他手机/标签不一样