0

在我的应用程序中,我有一个 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 上的视频播放器,而无需通过浏览器作为中间步骤。

4

1 回答 1

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,它与其他手机/标签中的不同

于 2012-05-09T13:11:11.180 回答