0

私のアプリケーションでは、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を持っていないことです.startActivityに渡すことができるURIがあるかどうかです.Kindle Fireでビデオプレーヤーを直接呼び出すことができます.中間ステップとしてブラウザを通過する必要はありません.

4

1 に答える 1

1

ただの観察。インテントを呼び出すことができるかどうかを検出するためのより良い方法があります

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

KFを明確にするために、最初のアクティビティを起動することはなく、2番目に起動し、KFが引き継いでYouTubeアプリに移動します。

もしそうなら、私が考えることができるのは、最初のインテントの詳細が正しくないか、KFの場合は他の電話/タブと同じではないということだけです

于 2012-05-09T13:11:11.180 に答える