Hi,
Then, you need (of-course) to use the back button to close the video and to go back. And this is how I managed to do this.
You'll need is to add your member variables
I've never imagined that playing a HTML5 Youtube video inside a WebView would be such a tedious task. I even didn't think of it as a separate task.
The problem is that the video doesn't play. YES, it's as simple as that.
Any way, I found a work around solution that causes the video to run inside the media player instead of the WebView and of-course instead of launching the browser.
First, you'll need to add the next piece of code to your activity.
private class MyChromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener{
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (view instanceof FrameLayout) {
// mainWebView is the view that the video should've played inside.
wv = (WebView)findViewById(R.id.mainWebView);
mCustomViewContainer = (FrameLayout) view;
mCustomViewCallback = callback;
// mainLayout is the root layout that (ex. the layout that contains the webview)
mContentView = (RelativeLayout)findViewById(R.id.mainLayout);
if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
mVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
// frame.removeView(video);
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnErrorListener(this);
mVideoView.start();
}
}
}
public void onHideCustomView() {
if (mVideoView == null){
return;
}else{
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
}
public void onCompletion(MediaPlayer mp) {
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
setContentView(mContentView);
}
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
setContentView(mContentView);
return true;
}
}
Then, you need (of-course) to use the back button to close the video and to go back. And this is how I managed to do this.
@Override
public void onBackPressed() {
if(mCustomViewContainer != null){
mVideoView.stopPlayback();
mCustomViewContainer.setVisibility(View.GONE);
if (mVideoView == null){
return;
}else{
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
setContentView(mContentView);
mCustomViewContainer = null;
}
}else if(mainWebView.canGoBack()){
mainWebView.goBack();
}else{
super.onBackPressed();
}
}
You'll need is to add your member variables
private VideoView mVideoView;
private RelativeLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
One last thing, and actually it's the most important step, is to add the next line.
webView.setWebChromeClient(new MyChromeClient());
That's it, don't hesitate to comment, to share your knowledge and to correct me.
Hi Polaris,
ReplyDeleteVery useful guide from you. Thanks. It seems yours is the only solution available for playing HTML5 videos through WebView.
According to your code, playing videos works fine but when the video is paused and if we move to home screen or we use any other application and if we return back to our video app, the video view is not retained. The video is played from beginning.
The Log cat says,
"couldn't save which view has focus because the focused view android.widget.VideoView@4057df18 has no id "
What am I missing ? can you throw me some light ?
Hi indiandragon,
Deleteyou can do something like the following:
private int vidPosition;
@Override
protected void onPause() {
if(mCustomViewContainer != null){
vidPosition = mVideoView.getCurrentPosition();
}
super.onPause();
}
@Override
protected void onResume() {
if(mCustomViewContainer != null){
mVideoView.seekTo(vidPosition);
}
super.onResume();
}
I hope this helps.
Thanks, I will try this and post the result.
DeleteBy the way, I tried before to set id manually to avoid 'no id' warning
mCustomVideoView.setId(111);
mCustomVideoView.canPause();
I did not get the no id error, but at the same time the video did not start from the paused position.
Hi polaris,
DeleteYour solution works great !! But the issue is it works when the application is moved to background for a small amount of time or if less memory is used during the paused state.
I added,
mCustomViewContainer.setId(110);
mCustomVideoView.setId(111);
mCustomVideoView.canPause();
Which seem to help in pausing and restoring the video.
I think pausing and restoring a Custom video view has much to do with Phone Hardware (i.e its memory), Since the phone Iam using has very less memory I cannot restore the video all the time. I think Android shuts my activity down due to less memory.
If you have a better solution let me know, anyways thanks for your work :)
Also can the the onShowCustomView be included as a AsyncTask so the we wont get a ANR when the video takes long to play ? Just a thought, is it possible ?
DeleteThanks very much....this is amazing......
Deletehello ,
ReplyDeletei have made exactly like you said , and the video is not playing .. can you help me...
this is my code .
package com.lamobileapps.onlinecinema;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.VideoView;
public class MainActivity extends Activity {
private VideoView mVideoView;
private RelativeLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private WebView wv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv1 = (WebView)findViewById(R.id.webView1);
wv1.setWebChromeClient(new MyChromeClient());
wv1.loadUrl("http://www.youtube.com/embed/g6csOdF0LF8");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private class MyChromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener{
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (view instanceof FrameLayout) {
// mainWebView is the view that the video should've played inside.
wv = (WebView)findViewById(R.id.webView1);
mCustomViewContainer = (FrameLayout) view;
mCustomViewCallback = callback;
// mainLayout is the root layout that (ex. the layout that contains the webview)
mContentView = (RelativeLayout)findViewById(R.id.buttonlayout);
if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
mVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
// frame.removeView(video);
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnErrorListener(this);
mVideoView.start();
}
}
}
public void onHideCustomView() {
if (mVideoView == null){
return;
}else{
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
}
public void onCompletion(MediaPlayer mp) {
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
setContentView(mContentView);
}
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
DeletesetContentView(mContentView);
return true;
}
}
@Override
public void onBackPressed() {
if(mCustomViewContainer != null){
mVideoView.stopPlayback();
mCustomViewContainer.setVisibility(View.GONE);
if (mVideoView == null){
return;
}else{
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
setContentView(mContentView);
mCustomViewContainer = null;
}
}else if(wv.canGoBack()){
wv.goBack();
}else{
super.onBackPressed();
}
}
}
pleas help me ..
DeleteNice tutorial.
ReplyDeleteIts working for me.
But I have a problem with "View getVideoLoadingProgressView();"
-> How we use this method for showing progress dialog before play video.
queria preguntar, me funciono perfectamente tu aporte, pero cuando la url de youtube no es una fija si no q tengo una lista de videos y al seleccionar se abre el video muy bien, el unico problema que cuando abro otro video y presiono atras me vuelve a abrir el primer video. como se solucionaria este problema q tengo???, gracias
ReplyDeleteCan I use this code in some way for show the video in the same view (little, without changing the view). Or is impossible play a video of youtube without fullscreen?
ReplyDeleteThank You.
When i implemented the code the video was playing correctly. But YouTube videos full screen button click pauses the video and the whole screen goes black. Is there any way out????
ReplyDeleteThanks in advance:)
Hello, I have been trying to get your example to work but no luck so far.
ReplyDeleteCould you please explain to me what the 'wv = (WebView)findViewById(R.id.mainWebView);'should be?
Could you please post your layout file so I can see how the views are connected?
Hi Polarais, Your code works fine. But in my case, I want to put this inside a View, so the code
ReplyDeletesetContentView(mContentView); is throwing a error. Can you help me to fix this? Thanks in advance.
This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.Android Training in chennai with placement | Android Training in velachery
ReplyDeleteAppreciation for really being thoughtful and also for deciding on certain marvelous guides most people really want to be aware of.
ReplyDeleteClick here:
angularjs training in sholinganallur
Click here:
angularjs training in btm
Click here:
angularjs training in rajajinagar
Click here:
angularjs training in marathahalli
Click here:
angularjs training in bangalore
rpa Training in tambaram
ReplyDeleteblueprism Training in tambaram
automation anywhere training in tambaram
iot Training in tambaram
rpa training in sholinganallur
blue prism training in sholinganallur
automation anywhere training in sholinganallur
iot training in sholinganallur
Thanks for your informative article, Your post helped me to understand the future and career prospects & Keep on updating your blog with such awesome article.Click here:
ReplyDeleteMicrosoft azure training in velarchery
Click here:
Microsoft azure training in sollinganallur
Click here:
Microsoft azure training in btm
Click here:
Microsoft azure training in rajajinagar
Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
ReplyDeleteData Science training in marathahalli
Data Science training in btm
Data Science training in rajaji nagar
Data Science training in chennai
Data Science training in kalyan nagar
Data Science training in electronic city
Data Science training in USA
Data science training in pune
Thanks you for sharing this unique useful information content with us. Really awesome work. keep on blogging
ReplyDeletejava training in tambaram | java training in velachery
java training in omr | oracle training in chennai
java training in annanagar | java training in chennai
Really great post, I simply unearthed your site and needed to say that I have truly appreciated perusing your blog entries. I want to say thanks for great sharing.
ReplyDeletepython training in pune
python online training
python training in OMR
Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
ReplyDeleteDevops training in velachery
Devops training in annanagar
Devops training in sholinganallur
Devops training in tambaram
DevOps online Training
DevOps Training in USA
I think you have a long story to share and i am glad after long time finally you cam and shared your experience.
ReplyDeleteBlueprism training in marathahalli
Blueprism training in btm
Blueprism online training
You made such an interesting piece to read, giving every subject enlightenment for us to gain knowledge. Thanks for sharing the such information with us
ReplyDeleteangularjs Training in bangalore
angularjs Training in btm
angularjs Training in electronic-city
angularjs online Training
angularjs Training in marathahalli
Really very nice blog information for this one and more technical skills are improve,i like that kind of post.
ReplyDeletejava training in annanagar | java training in chennai
java training in chennai | java training in electronic city
Hmm, it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well as an aspiring blog writer, but I’m still new to the whole thing. Do you have any recommendations for newbie blog writers? I’d appreciate it.
ReplyDeleteAWS Interview Questions And Answers
AWS Training in Bangalore | Amazon Web Services Training in Bangalore
AWS Training in Pune | Best Amazon Web Services Training in Pune
Amazon Web Services Training in Pune | Best AWS Training in Pune
AWS Online Training | Online AWS Certification Course - Gangboard
Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging.
ReplyDeleteangularjs Training in chennai
angularjs-Training in pune
angularjs-Training in chennai
angularjs Training in chennai
angularjs-Training in tambaram
Really great post, Thank you for sharing This knowledge.Excellently written article, if only all bloggers offered the same level of content as you, the internet would be a much better place. Please keep it up!
ReplyDeleteinformatica mdm online training
apache spark online training
angularjs online training
devops online training
aws online training
This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
ReplyDeletelg mobile service center in velachery
lg mobile service center in porur
lg mobile service center in vadapalani
Thanks For sharing Your Information The Information shared Is Very Valuable Please Keep Updating Us Python Online Course Hadoop Online Course Data Science Online Course Aws Online Course
ReplyDeletewe are one of the top rated movers and packers service provider in all over india.we taqke all our own risks and mentanance. for more info visit our site and get all details and allso get
ReplyDeleteamazing offers
Packers and Movers in Haryana
Packers and Movers Haryana
Best Packers and Movers Gurugram
Packers and Movers in Gurugram
packers and movers in east delhi
packers and movers in south delhi
packer mover in delhi
cheapest packers and movers in faridabad
best Packers and Movers Faridabad
nice post... Thank you for sharing useful information..
ReplyDeleteBest Python Training in Chennai/Python Training Institutes in Chennai/Python/Python Certification in Chennai/Best IT Courses in Chennai/python course duration and fee/python classroom training/python training in chennai chennai, tamil nadu/python training institute in chennai chennai, India/
Your info is really amazing with impressive content..Excellent blog with informative concept. Really I feel happy to see this useful blog, Thanks for sharing such a nice blog..
ReplyDeleteIf you are looking for any python Related information please visit our website python training institutes in Bangalore page!
Your info is really amazing with impressive content..Excellent blog with informative concept. Really I feel happy to see this useful blog, Thanks for sharing such a nice blog..
ReplyDeleteIf you are looking for any Data science Related information please visit our website Data science courses in Pune page!
thanks for sharing such an informative stuff...
ReplyDeleteamazon aws tutorial
I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
ReplyDeleteoracle apex tutorial
I am really happy to say it’s an interesting post to read. I learn new information from your article, you are doing a great job. Keep it up...
ReplyDeleteBangalore Training Academy is a Best Institute of Salesforce Admin Training in Bangalore . We Offer Quality Salesforce Admin with 100% Placement Assistance on affordable training course fees in Bangalore. We also provide advanced classroom and lab facility.
Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
ReplyDeleteangular js online training
top angular js online training
best angular js online training
I really like looking through an blog article that can make people think. Also, many thanks for allowing for me to comment!
ReplyDeleteThis is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious.
ReplyDeletedata science training online
microsoft azure training Whatever we gathered information from the blogs, we should implement that in practically then only we can understand that exact thing clearly, but it’s no need to do it, because you have explained the concepts very well. It was crystal clear, keep sharing..
ReplyDeleteAmazing article. Your blog helped me to improve myself in many ways thanks for sharing this kind of wonderful informative blogs in live.leave some more details.
ReplyDeleteAi & Artificial Intelligence Course in Chennai
PHP Training in Chennai
Ethical Hacking Course in Chennai Blue Prism Training in Chennai
UiPath Training in Chennai
Your article is very interesting. thanks for share information
ReplyDeletewill smith net worth
Deepika Padukone
ethan-wacker-height
heidi-gardner-height
ethan-wacker-height
emma-stone-height
no deposit bonus forex 2021 - takipçi satın al - takipçi satın al - takipçi satın al - takipcialdim.com/tiktok-takipci-satin-al/ - instagram beğeni satın al - instagram beğeni satın al - google haritalara yer ekleme - btcturk - tiktok izlenme satın al - sms onay - youtube izlenme satın al - google haritalara yer ekleme - no deposit bonus forex 2021 - tiktok jeton hilesi - tiktok beğeni satın al - binance - takipçi satın al - uc satın al - finanspedia.com - sms onay - sms onay - tiktok takipçi satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - tiktok takipçi satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - perde modelleri - instagram takipçi satın al - instagram takipçi satın al - cami avizesi - marsbahis
ReplyDeleteTitle:
ReplyDeleteBest Software Training Center in Chennai | Infycle Technologies
Description:
Want to set your career towards the software field? Then join hands with Infycle Technologies to make this into reality. Infycle Technologies, the best software training institute in Chennai, gives the combined and best software training in Chennai, with various stages of multiple courses such as Big Data, Python, Data Science, Oracle, etc., which will be guided by professional tutors in the field. The Hands-on practical training and the mock interview sessions will be given to the candidates to face the interviews with full confidence. Apart from all, the candidates will be placed in the top MNC's with the highest salary package in the market. To get it all, call 7502633633 and make this happen for your happy life.Best training in Chennai
Infycle Technologies, the best software training institute in Chennai offers the No.1 Data Science training in Chennai for Students, tech professionals, and freshers. In addition to the Data Science Training Course, Infycle also offers other professional courses such as Cyber Security, Python, Oracle, Java, Power BI, Digital Marketing, Big Data, etc., which will be trained with 100% practical classes. After the completion of training, the trainees will be sent for placement interviews in the top MNC's. Call 7502633633 to get more info and a free demo.
ReplyDeleteTook me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained! Best Coding Android Wallpapers
ReplyDeletemmorpg oyunları
ReplyDeleteinstagram takipçi satın al
tiktok jeton hilesi
TİKTOK JETON HİLESİ
antalya saç ekimi
İnstagram Takipçi Satın Al
İnstagram takipçi satin al
metin2 pvp serverlar
instagram takipçi satın al
perde modelleri
ReplyDeleteSms onay
Turkcell mobil ödeme bozdurma
nft nasıl alınır
ANKARA EVDEN EVE NAKLİYAT
Trafik sigortasi
dedektör
web sitesi kurma
ask romanlari
smm panel
ReplyDeletesmm panel
iş ilanları blog
İNSTAGRAM TAKİPÇİ SATIN AL
HIRDAVATÇI BURADA
beyazesyateknikservisi.com.tr
servis
Tiktok Jeton Hile
Good content. You write beautiful things.
ReplyDeletesportsbet
taksi
korsan taksi
hacklink
mrbahis
vbet
hacklink
sportsbet
mrbahis
sms onay
ReplyDeletetakipçi satın al
DW5ED
No control professor find. New church society anyone foreign man. Example operation what century.top 10 news today
ReplyDeletemanisa
ReplyDeletemaraş
mardin
marmaris
mersin
73LNZV
yalova
ReplyDeleteyozgat
elazığ
van
sakarya
FO1
ankara parça eşya taşıma
ReplyDeletetakipçi satın al
antalya rent a car
antalya rent a car
ankara parça eşya taşıma
Jİ6V6W
0868F
ReplyDeleteBingöl Evden Eve Nakliyat
Ankara Lojistik
Urfa Lojistik
Siirt Evden Eve Nakliyat
Maraş Evden Eve Nakliyat
DB7D9
ReplyDeleteYalova Lojistik
Karapürçek Boya Ustası
Bitrue Güvenilir mi
Batman Lojistik
Ünye Organizasyon
Denizli Evden Eve Nakliyat
Nevşehir Şehir İçi Nakliyat
Antalya Şehirler Arası Nakliyat
Çorum Evden Eve Nakliyat
863FC
ReplyDeletebolu yabancı sohbet
osmaniye telefonda sohbet
yozgat en iyi ücretsiz sohbet siteleri
parasız sohbet
sohbet muhabbet
yabancı sohbet
ağrı yabancı görüntülü sohbet
sesli sohbet sesli chat
amasya chat sohbet
A525A
ReplyDeletegörüntülü sohbet canlı
kırıkkale sesli görüntülü sohbet
telefonda sohbet
canlı sohbet et
bitlis sohbet chat
düzce ucretsiz sohbet
random görüntülü sohbet
diyarbakır ücretsiz sohbet uygulaması
Karaman Bedava Sohbet
0D244
ReplyDeleteOsmo Coin Hangi Borsada
Mexc Borsası Kimin
Sui Coin Hangi Borsada
Linkedin Beğeni Hilesi
Trovo Takipçi Hilesi
Soundcloud Reposts Hilesi
Bitcoin Kazanma
Referans Kimliği Nedir
Arbitrum Coin Hangi Borsada
34DB3
ReplyDeletePertek
Ardanuç
Çanakkale
Narman
Lalapaşa
Doğanhisar
Havsa
İzmit
Gevaş
731C391314
ReplyDeletetürk takipçi satın al