Saya sedang menyusun aplikasi murah yang antara lain "membingkai" beberapa situs web kami ... Cukup sederhana dengan WebViewClient
. sampai saya memutar video.
Video selesai sebagai HTML5
elemen, dan ini berfungsi dengan baik dan keren di Chrome, iPhone, dan sekarang setelah kami memperbaiki masalah enkode, ia berfungsi dengan baik Android
di browser asli.
Sekarang intinya: WebView
tidak menyukainya. Sama sekali. Saya dapat mengklik gambar poster, dan tidak ada yang terjadi.
Googling, saya menemukan ini yang dekat, tetapi tampaknya didasarkan pada 'link' (seperti dalam a href ...) bukan elemen video. (onDownloadListener tampaknya tidak dipanggil pada elemen video ...)
Saya juga melihat referensi untuk mengganti onShowCustomView, tetapi tampaknya itu tidak dipanggil pada elemen video ... juga tidak shouldOverrideUrlLoading ..
Saya lebih suka tidak masuk ke "tarik xml dari server, format ulang dalam aplikasi" .. dengan menjaga tata letak cerita di server, saya dapat mengontrol konten sedikit lebih baik tanpa memaksa orang untuk terus memperbarui aplikasi. Jadi jika saya bisa meyakinkan WebView untuk menangani tag seperti browser asli, itu akan menjadi yang terbaik.
Saya jelas kehilangan sesuatu yang jelas .. tapi saya tidak tahu apa.
VideoEnabledWebView
sini stackoverflow.com/questions/15768837/…Jawaban:
Saya menjawab topik ini kalau-kalau ada yang membacanya dan tertarik dengan hasilnya. Dimungkinkan untuk melihat elemen video (tag html5 video) dalam WebView, tetapi saya harus mengatakan bahwa saya harus menanganinya selama beberapa hari. Ini adalah langkah-langkah yang harus saya ikuti sejauh ini:
-Cari video yang dikodekan dengan benar
-Ketika menginisialisasi WebView, setel JavaScript, Plug-in WebViewClient, dan WebChromeClient.
-Handle onShowCustomView di objek WebChromeClient.
-Tangani peristiwa onCompletion dan onError untuk video tersebut, untuk kembali ke tampilan web.
Tapi sekarang saya harus mengatakan masih ada masalah penting. Saya hanya bisa memainkannya sekali. Kedua kalinya saya mengklik dispatcher video (baik poster atau tombol putar), itu tidak melakukan apa-apa.
Saya juga ingin video diputar di dalam bingkai WebView, daripada membuka jendela Media Player, tetapi bagi saya ini adalah masalah sekunder.
Saya harap ini membantu seseorang, dan saya juga akan berterima kasih atas komentar atau saran apa pun.
Saludos, terrícolas.
sumber
WebChromeClient
dan mengganti metode terkait yang Anda butuhkan. Jika Anda bersikeras, saya dapat mengupload kelas lainnya nanti saat saya pulang.Setelah penelitian panjang, saya mendapatkan hal ini bekerja. Lihat kode berikut:
Test.java
HTML% VIDEO.java
custom_screen.xml
video_loading_progress.xml
colors.xml
Manifest.xml
Mengharapkan hal-hal lain yang bisa Anda pahami.
sumber
Jawaban mdelolmo sangat membantu, tapi seperti yang dia katakan, videonya hanya diputar sekali dan Anda tidak bisa membukanya lagi.
Saya melihat ini sedikit dan inilah yang saya temukan, jika ada wisatawan WebView yang lelah seperti saya tersandung pada posting ini di masa mendatang.
Pertama, saya melihat dokumentasi VideoView dan MediaPlayer dan mendapatkan pemahaman yang lebih baik tentang cara kerjanya. Saya sangat merekomendasikan itu.
Kemudian, saya melihat kode sumber untuk melihat bagaimana Browser Android melakukannya. Lakukan pencarian halaman dan lihat bagaimana mereka menanganinya
onShowCustomView()
. Mereka menyimpan referensi keCustomViewCallback
dan ke tampilan kustom.Dengan semua itu, dan dengan jawaban mdelolmo, saat Anda selesai dengan videonya, yang perlu Anda lakukan hanyalah dua hal. Pertama, pada saat
VideoView
Anda menyimpan referensi, panggilanstopPlayback()
yang akan merilisMediaPlayer
untuk digunakan nanti di tempat lain. Anda dapat melihatnya di kode sumber VideoView . Kedua, padaCustomViewCallback
Anda menyimpan referensi untuk meneleponCustomViewCallback.onCustomViewHidden()
.Setelah melakukan dua hal itu, Anda dapat mengklik video yang sama atau video lain dan itu akan terbuka seperti sebelumnya. Tidak perlu memulai ulang seluruh WebView.
Semoga membantu.
sumber
Sebenarnya, tampaknya cukup hanya melampirkan WebChromeClient saham ke tampilan klien, ala
dan Anda harus mengaktifkan akselerasi perangkat keras!
Setidaknya, jika Anda tidak perlu memutar video layar penuh, Anda tidak perlu menarik VideoView keluar dari WebView dan memasukkannya ke dalam tampilan Activity. Ini akan diputar di kotak yang dialokasikan untuk elemen video.
Ada ide bagaimana cara mencegat tombol perluas video?
sumber
Saya tahu utas ini berumur beberapa bulan, tetapi saya menemukan solusi untuk memutar video di dalam WebView tanpa melakukannya dalam layar penuh (tetapi masih di pemutar media ...). Sejauh ini saya tidak menemukan petunjuk apapun tentang ini di internet jadi mungkin ini juga menarik untuk orang lain. Saya masih berjuang dalam beberapa masalah (yaitu menempatkan pemutar media di bagian kanan layar, tidak tahu mengapa saya melakukan kesalahan tetapi menurut saya ini adalah masalah yang relatif kecil ...).
Di Custom ChromeClient tentukan LayoutParams:
Metode onShowCustomView saya terlihat seperti ini:
Jadi, saya harap saya dapat membantu ... Saya juga harus bermain-main dengan Video-Encoding dan melihat berbagai jenis penggunaan WebView dengan video html5 - pada akhirnya kode kerja saya adalah campuran liar dari berbagai bagian kode yang saya temukan di internet dan beberapa hal yang harus saya pikirkan sendiri. Benar-benar menyebalkan di a *.
sumber
Pendekatan ini bekerja dengan baik hingga 2,3 Dan dengan menambahkan hardwareaccelerated = true bahkan bekerja dari 3.0 ke ICS Satu masalah yang saya hadapi saat ini adalah saat peluncuran kedua aplikasi pemutar media mengalami crash karena saya belum menghentikan pemutaran dan merilis pemutar Media. Karena objek VideoSurfaceView, yang kita dapatkan dalam fungsi onShowCustomView dari OS 3.0, khusus untuk browser dan bukan objek VideoView seperti pada, hingga OS 2.3. Bagaimana cara mengaksesnya dan menghentikanPlayback serta melepaskan sumber daya?
sumber
AM mirip dengan apa yang dilakukan BrowerActivity . untuk FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams (768, 512);
Saya pikir kita bisa menggunakan
sebagai gantinya.
Masalah lain yang saya temui adalah jika video sedang diputar, dan pengguna mengklik tombol kembali, lain kali, Anda pergi ke aktivitas ini (singleTop one) dan tidak dapat memutar video. untuk memperbaikinya, saya menelepon
dalam metode onBackPressed aktivitas.
sumber
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi sudahkah Anda mencoba
hardwareAccelerated="true"
bendera manifes untuk aplikasi atau aktivitas Anda?Dengan set ini, tampaknya berfungsi tanpa modifikasi WebChromeClient (yang saya harapkan dari Elemen DOM.)
sumber
hardwareAccelerated
dimulai dari Android 3.0Saya menggunakan html5webview untuk mengatasi masalah ini. Unduh dan masukkan ke dalam proyek Anda, lalu Anda dapat membuat kode seperti ini.
Agar video dapat diputar, masukkan kode android: configChanges = "orientasi" ke dalam Aktivitas Anda misalnya (Androidmanifest.xml)
dan mengganti metode onConfigurationChanged.
sumber
Pertanyaan ini sudah lama sekali, tapi mungkin jawaban saya akan membantu orang-orang seperti saya yang harus mendukung Android versi lama. Saya mencoba banyak pendekatan berbeda yang berfungsi pada beberapa versi Android, namun tidak semuanya. Solusi terbaik yang saya temukan adalah menggunakan Crosswalk Webview yang dioptimalkan untuk dukungan fitur HTML5 dan berfungsi di Android 4.1 dan lebih tinggi. Ini semudah digunakan sebagai Android WebView default. Anda hanya perlu memasukkan perpustakaan. Di sini Anda dapat menemukan tutorial sederhana tentang cara menggunakannya: https://diego.org/2015/01/07/embedding-crosswalk-in-android-studio/
sumber
Nah, ternyata ini tidak mungkin dilakukan tanpa menggunakan JNI untuk mendaftarkan plugin untuk mendapatkan acara video. (Secara pribadi, saya menghindari JNI karena saya benar-benar tidak ingin berurusan dengan kekacauan ketika tablet Android berbasis Atom keluar dalam beberapa bulan ke depan, kehilangan portabilitas Java.)
Satu-satunya alternatif nyata tampaknya adalah membuat halaman web baru hanya untuk WebView dan membuat video dengan cara jadul dengan tautan A HREF seperti yang dikutip di url Codelark di atas.
Menjijikkan.
sumber
Tentang penggunaan sarang lebah
hardwareaccelerated=true
danpluginstate.on_demand
tampaknya berhasilsumber
Saya memiliki masalah serupa. Saya memiliki file dan video HTML di folder aset aplikasi saya.
Oleh karena itu, video tersebut ditempatkan di dalam APK. Karena APK sebenarnya adalah file ZIP, WebView tidak dapat membaca file videonya.
Menyalin semua file HTML dan video ke SD-Card berhasil untuk saya.
sumber