Android WebView中的Kindle Fire和Youtube链接

Android WebView中的Kindle Fire和Youtube链接,android,youtube,amazon,Android,Youtube,Amazon,我们在Android市场上有几个应用程序,我们还将它们提交给亚马逊的Android应用商店。在点燃的火熄灭之前,一切都很顺利。在我们的几个应用程序中,我们通过网络视图上的链接发布Youtube视频。以下是来自setOnClickListener的相关代码,用于推送视图和处理Youtube链接: mWebView.setWebViewClient (new WebViewClient () { @ Override public boolean shouldOverrideUrlLoad

我们在Android市场上有几个应用程序,我们还将它们提交给亚马逊的Android应用商店。在点燃的火熄灭之前,一切都很顺利。在我们的几个应用程序中,我们通过网络视图上的链接发布Youtube视频。以下是来自setOnClickListener的相关代码,用于推送视图和处理Youtube链接:

mWebView.setWebViewClient (new WebViewClient () {
     @ Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("vnd.youtube")){  
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
         } else{
            return false;
         }
     }
});
正如我所说的,这在我们测试过的所有Android设备上都非常有效,但我们从Amazon收到通知,他们在点击视频链接时会崩溃。我认为这是因为火灾没有加载YouTube应用程序。还有其他人经历过类似的问题吗?在火灾现场的网络视图中播放youtube视频的首选方法是什么

以下是亚马逊提供的logcat:

01-09 12:28:32.715 W/dalvikvm(5805): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-09 12:28:32.715 D/ActivityManager(1372): Starting: Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX } from pid 5805
01-09 12:28:32.793 E/AndroidRuntime(5805): FATAL EXCEPTION: main
01-09 12:28:32.793 E/AndroidRuntime(5805): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX }
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.Activity.startActivityFromChild(Activity.java:3103)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.Activity.startActivityForResult(Activity.java:2883)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.Activity.startActivity(Activity.java:2969)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at com.XXXXXXXXXX.XXXXXXXXXX.VideoActivity$1$1.shouldOverrideUrlLoading(VideoActivity.java)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:216)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:323)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.os.Looper.loop(Looper.java:130)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at java.lang.reflect.Method.invokeNative(Native Method)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at java.lang.reflect.Method.invoke(Method.java:507)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
01-09 12:28:32.793 E/AndroidRuntime(5805):  at dalvik.system.NativeStart.main(Native Method)

编辑

我现在可以正常工作了。基本上,我将资源中的视频文件夹(包含视频页面的所有html)复制到一个新的video_fire目录中。我更新了实际的代码,如果android.os.Build.MODEL是“kindlefire”,则指向video_fire目录,其他所有的都指向普通的视频目录。我还修改了webview分配以使用getParent()而不是VideoActivity.this。这修复了我在关于全屏显示的评论中描述的问题。下面是我使用的更新代码(单击列表视图中的项目时,它会显示相应的html页面):

public void-onItemClick(适配器视图a、视图v、内部位置、长id){
字符串内容HTML;
试一试{
if(android.os.Build.MODEL.equals(“KindleFire”)){
contentsOfHtml=readFileAsString(“video_fire/”+htmlarray[position]);
}否则{
contentsOfHtml=readFileAsString(“video/”+htmlarray[position]);
}
}捕获(IOE){
//不应该发生!
抛出新的运行时异常(e);
} 
WebView mWebView=新的WebView(getParent());
WebSettings WebSettings=mWebView.getSettings();
webSettings.setPluginsEnabled(true);
setJavaScriptEnabled(true);
mWebView.setWebViewClient(新WebViewClient(){
@重写公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
如果(url.startsWith(“vnd.youtube”){
startActivity(新意图(Intent.ACTION_视图,Uri.parse(url));
返回true;
}否则{
返回false;
}
}
});
mWebView.loadDataWithBaseURL(“file:///android_asset/,contentsOfHtml,text/html,utf-8,等等);
ReflectionGroup.group.replaceView(mWebView);
返回;
});
是的,我使用的是已折旧的ActivityGroup(这是旧代码)。我正在更新用于实现片段的基本代码

然后,我为普通设备创建了html:

<html>
<head>
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
    <p class="title">Title</p>
    <hr/>
    <a href="vnd.youtube://XXXXX"><div><center><img src="images/video1.jpg" width="220" height="150"></center></div></a>
    </center>
    <p class="para">Text</p>
    <hr/>       
</body>
</html>

标题


文本


以及KindleFire的特定HTML。我想我应该检查一下这段代码是否也能在其他设备上工作,但这必须放在我的待办事项清单上

<html>
<head>
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
    <p class="title">Title</p>
    <hr/>
<iframe class="youtube-player" type="text/html" width="600" height="361" src="http://www.youtube.com/embed/XXXXXXXX" frameborder="0">
</iframe>
    </center>
    <p class="para">Text    </p>
    <hr/>       
</body>
</html>

标题


文本



尝试用特定的异常类型捕获此异常,然后编写代码,通过编辑url启动浏览器(以“http”开头,否则它将无法在web浏览器中打开)。


捕获(ActivityNotFoundException e){
url=您的url\u开始于\u HTTP;
startActivity(新意图(Intent.ACTION\u视图,Uri.parse(url));
}


编辑的部分:

现在这是一个不同的问题,通常在活动完成后调用或尝试显示/修改视图时会出现。在任何异步任务中,您是否在onPostExecuted()中执行与ui相关的操作??这可能发生在创建该任务的活动完成后。

如果没有任何东西可以处理youtube链接。那你已经有问题了

这一错误清楚地表明:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX }

也就是说,系统中没有任何东西可以处理这个问题,我不认为你做错了什么,但我对KindleFire的平台并不熟悉。然而;通过使用PackageManager,您可以找到答案。

我今天刚买了一台kindle fire,正在进行测试。我使用标准iframe播放视频,但在播放视频时,如果我单击帧中的全屏按钮,它将强制关闭:01-23 21:58:27.093:E/AndroidRuntime(2485):android.view.WindowManager$BadTokenException:无法添加窗口--token android.app.LocalActivityManager$LocalActivityRecord@405315a8无效;你的活动正在进行吗?编辑了我的答案。您还应该更新您的问题,将此新问题添加到该问题中,以便您可以在列表中再次看到该问题并给出答案it@WookieLNX如果它说“无法添加窗口”,那么您的代码中可能有错误。他说错误状态为“您的活动正在运行”。这显然意味着他正在修改在该活动中创建的视图,并在该活动完成后进行操作。使用移动链接而不是普通的youtube链接怎么样。。。而不是做那件事有什么意义。。如果它做的与他尝试的完全相同的事情,KindleFire不会附带YouTube应用程序,而几乎所有Android设备都默认安装了它。事实上,亚马逊Appstore中没有官方的YouTube应用程序。我认为亚马逊和谷歌之间存在着一些不好的关系,阻止了它的出现……如果事实果真如此,那么你将不得不依靠浏览器来呈现youtube链接,除非你在运行webview时修改它,否则这可能会使你失去控制。你可以看看我上面的解决方案。到目前为止,它工作得很好,因为我只是将视频嵌入到网络视图中。
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=vnd.youtube://XXXXXXXXXX }