У нас есть несколько приложений на Android Market, которые мы также отправили Amazon в свой Appstore для Android. Все хорошо работало, пока не появился Kindle Fire. В нескольких наших приложениях мы запускаем видео Youtube со ссылкой на WebView. Вот соответствующий код из setOnClickListener, что толкает вид и обрабатывает ссылку Youtube:Kindle Fire и Youtube Ссылки в WebView
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» и обычный каталог видео для всех остальных. Я также изменил выделение webview, чтобы использовать 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, которая амортизируется (это старый код). Я работаю над обновлением базового кода, который использует это, чтобы реализовать Fragments ...
Я тогда 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>
Вы нашли решение? – akkilis
Я только что купил огонь разжигания сегодня, и я работаю над его тестированием. У меня есть видео для воспроизведения с использованием стандартного iframe, но при воспроизведении видео, если я нажму на кнопку полного экрана в кадре, он закроет: 01-23 21: 58: 27.093: E/AndroidRuntime (2485) : android.view.WindowManager $ BadTokenException: Не удается добавить оконный токен android.app.LocalActivityManager$LocalActivityRecord @ 405315a8 недействителен; работает ли ваша деятельность? – WookieLNX
изменен мой ответ. Вы также должны обновить свой вопрос, добавив к нему эту новую проблему, чтобы увидеть его в списке и ответить на него – akkilis