У нас есть несколько приложений в Android Market, которые мы также отправили в Amazon в их Appstore для Android.Все работало хорошо, пока не появился Kindle Fire.В некоторых наших приложениях мы запускаем Youtube видео по ссылке в WebView.Вот соответствующий код от 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, что они получают сбои при нажатии на ссылки на видео.Я предполагаю, что это происходит потому, что Fire не загружается с приложением YouTube.Кто-нибудь еще испытывал подобные проблемы?Каков будет предпочтительный метод для воспроизведения видео на YouTube из веб-просмотра на Fire?
Вот logcat, предоставленный Amazon:
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.Я обновил фактический код, чтобы он указывал на каталог video_fire, если для android.os.Build.MODEL установлен «Kindle Fire», и на обычный каталог видео для всего остального.Я также изменил распределение веб-просмотров, чтобы использовать getParent (), а не VideoActivity.this.Это исправило проблему, которую я описал в комментариях о полноэкранном режиме.Ниже приведен обновленный код, который я использовал (при нажатии на элемент в ListView он отображает соответствующую HTML-страницу):
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
String contentsOfHtml;
try {
if (android.os.Build.MODEL.equals("Kindle Fire")) {
contentsOfHtml = readFileAsString("video_fire/"+htmlarray[position]);
} else {
contentsOfHtml = readFileAsString("video/"+htmlarray[position]);
}
} catch (IOException e) {
// Should never happen!
throw new RuntimeException(e);
}
WebView mWebView = new WebView(getParent());
WebSettings webSettings = mWebView.getSettings();
webSettings.setPluginsEnabled(true);
webSettings.setJavaScriptEnabled(true);
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;
}
}
});
mWebView.loadDataWithBaseURL("file:///android_asset/", contentsOfHtml, "text/html", "utf-8", "");
ReflectionGroup.group.replaceView(mWebView);
return;
});
Да, я использую 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>
И специальный HTML для Kindle Fire.Полагаю, мне следует проверить, будет ли этот код работать и на других устройствах, но это нужно будет включить в мой список дел.
<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>