Веб-просмотр Android загрузки html5 страницы с SD-карты с видео mp4 на различные API

Это мой первый вопрос на форумах.

Я создаю приложение, которое реализует простой веб-просмотр, который загружает страницу html5 с SD-карты.

Приложение представляет собой презентацию из 5 разделов, и каждый раздел содержит некоторый текст, наложенный поверх видео высокой четкости около 2 секунд, который играет в цикле, в основном действуя как страница с фоновым видео. Приложение работает в полноэкранном режиме с автоматическим почтовым ящиком / стойкой в ​​зависимости от разрешения и ориентации видео.

В Chrome (Windows 7) и Node-Webkit приложение работает красиво, выглядит хорошо и стабильно. На Android 4.0.3 (Galaxy Tab 10.1) он работает достаточно хорошо – приложение выглядит неплохо и стабильно, хотя, возможно, невозможно предварительно загрузить видео: я вставляю mp4s внутри html-страницы с помощью javascript CreateElement ("video ") И присвоить атрибуту preload значение true). На Android 4.1.1 (Medion Lifetab) видео просто не загружается, а приложение отображает серое окно с иконкой видео. Кто-нибудь знает почему?

Кроме того, событие «canplaythrough», похоже, никогда не срабатывает на планшетах (другая ошибка, я думаю), поэтому я вынужден использовать событие «loadstart», которое не то же самое, но достаточно хорошее.

Вот источник (простой просмотрщик веб-страниц, который загружает html5 из внешнего хранилища)

——————————– activity_main.xml ————— —————–

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="top" android:orientation="horizontal" android:background="@null" tools:context=".MainActivity" > <WebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:focusable="true" android:scrollbars="none" /> </RelativeLayout> 

——————————– AndroidManifest.xml ————— —————–

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.rr.pe2013" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" /> <application android:hardwareAccelerated="true" android:keepScreenOn="true" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.rr.pe2013.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

——————————– MainActivity.java ————— —————–

 package com.rr.pe2013; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.annotation.SuppressLint; import android.graphics.Color; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.Window; import android.view.WindowManager; import android.webkit.ConsoleMessage; import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebSettings; import android.webkit.WebChromeClient; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { WebView webView; GestureDetector gestureDetector; @SuppressWarnings("deprecation") @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // data folder located on the sd card String webAppFolder = Environment.getExternalStorageDirectory().getPath() + "/rr/pe2013"; // remove title bar as we already have it in the web app this.requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Point to the content view defined in XML setContentView(R.layout.activity_main); // configure the webview setup in the xml layout webView = (WebView) findViewById(R.id.webView); // webView.clearView(); webView.setFocusable(true); webView.requestFocus(); webView.setBackgroundColor(Color.BLACK); webView.setInitialScale(1); // web view settings WebSettings webSettings = webView.getSettings(); // enable javascript, plugins, dom storage, file access webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setPluginState(WebSettings.PluginState.ON); webSettings.setDomStorageEnabled(true); webSettings.setSaveFormData(false); webSettings.setSavePassword(false); webSettings.setAllowFileAccess(true); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { webSettings.setAllowContentAccess(true); } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { webSettings.setAllowFileAccessFromFileURLs(true); webSettings.setAllowUniversalAccessFromFileURLs(true); } // more settings webSettings.setLoadsImagesAutomatically(true); webSettings.setSupportMultipleWindows(false); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(false); webSettings.setSupportZoom(false); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { webSettings.setMediaPlaybackRequiresUserGesture(false); } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { webSettings.setBuiltInZoomControls(false); webSettings.setDisplayZoomControls(false); } // webchrome client webView.setWebChromeClient(new WebChromeClient() { // handle javascript alerts @Override public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { showToast(message); result.confirm(); return true; }; // log console messages @Override public void onConsoleMessage(String message, int lineNumber, String sourceID) { // showToast(sourceID + " [" + lineNumber + "]:\n" + message); } public boolean onConsoleMessage(ConsoleMessage cm) { showToast(cm.sourceId() + " [" + cm.lineNumber() + "]:\n" + cm.message()); return true; } }); // webview client webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView webView, String url) { } @Override public void onReceivedError(WebView webview, int errorCode, String description, String failingUrl) { // showToast("onReceivedError: " + description); } }); // load the URL String url = "file:///" + webAppFolder + "/index.html"; // from sd card webView.loadUrl(url); } @Override protected void onPause(){ super.onPause(); webView.onPause(); } @Override protected void onResume(){ super.onResume(); webView.onResume(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } // display an on-screen temporary message public void showToast(String toast, int duration) { Toast.makeText(getApplicationContext(), toast, duration).show(); } public void showToast(String toast) { showToast(toast, Toast.LENGTH_LONG); } } 

Intereting Posts
Библиотека поддержки дизайна Android FAB в фрагменте ViewPager с компоновкой координатора Дублированный идентификатор, тег null или родительский идентификатор с другим фрагментом для com.google.android.gms.maps.MapFragment Таблица INSERT ИЛИ IGNORE с ключом AUTOINCREMENT в Android Как создать простой проект GUI (Hello world) для Android на Clojure? ListSelector on Listview не работает Не удалось создать конвертер для моего класса в Android Retrofit library NetworkStatsManager.queryDetailsForUid не получает «одинаковые» значения, такие как TrafficStats Как нарисовать TiledMap с помощью scene2d Служба работает в фоновом режиме? Как изменить цвет фона кнопки переключения на Android Http://dl-ssl.google.com/android/repository/addons_list.xml недоступен Пожалуйста, помогите мне в решении следующего исключения? Защита от копирования приложений Google Play, лицензирование. Может ли это быть добавлено позже? Получить список друзей из facebook sdk 4.0.1 в android с графиком api 2.2 SetRetainInstance (true) + setCustomAnimations (…) = анимация для каждого изменения ориентации?