在我的应用程序中,我有一个可用于显示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>
答案 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与其他手机/标签不一样