Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Webview app won't let video player go full screen

Tags:

Hi I created a WebView app for my video site. The design of the site is a hybrid that loads for mobile users. Only videos compatible with mobile devices are loaded onto the hybrid. The players are from Vk, DailyMotion, YouTube, and QuickTime.

The videos only play on SDK 11 and higher but when I click on the player button to go full screen it only stops the video from playing while never launching into full screen mode.

(Webviewactivity.java)

public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     getWindow().requestFeature(Window.FEATURE_PROGRESS);     setContentView(R.layout.main);      parentView = (RelativeLayout) findViewById(R.id.parent_rl);      webviewProgress = (ProgressBar) findViewById(R.id.webview_progress);      webview = (WebView) findViewById(R.id.webview);     webview.getSettings().setJavaScriptEnabled(true);     webview.getSettings().setBuiltInZoomControls(true);     webview.getSettings().setAllowFileAccess(true);     webview.setWebViewClient(new MyWebViewClient());     webview.getSettings().setPluginState(WebSettings.PluginState.ON);     webview.loadUrl(URL);     webviewProgress.setProgress(0);      webview.setWebChromeClient(new MyWebChromeClient());     webview.setDownloadListener(new DownloadListener() {         public void onDownloadStart(String url, String userAgent,                 String contentDisposition, String mimetype,                 long contentLength) {             mProgressDialog = new ProgressDialog(WebViewActivity.this);             mProgressDialog.setMessage("Downloading...");             mProgressDialog.setIndeterminate(false);             mProgressDialog.setMax(100);             mProgressDialog                     .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);             DownloadFile downloadFile = new DownloadFile();             downloadFile.execute(url);         }     });      initSlider();      initAdmob(); }  /**  * When when file was chosen  */ @Override protected void onActivityResult(int requestCode, int resultCode,         Intent intent) {     if (requestCode == FILECHOOSER_RESULTCODE) {         if (null == mUploadMessage)             return;         Uri result = intent == null || resultCode != RESULT_OK ? null                 : intent.getData();         mUploadMessage.onReceiveValue(result);         mUploadMessage = null; 

(Main.xml)

android:id="@+id/parent_rl" android:layout_width="fill_parent" android:layout_height="fill_parent" android:keepScreenOn="true" >  <ProgressBar     android:id="@+id/webview_progress"     style="?android:attr/progressBarStyleHorizontal"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:layout_alignParentTop="true"     android:maxHeight="5dip"     android:minHeight="5dip"     android:progressDrawable="@drawable/blueprogress" />  <FrameLayout     android:id="@+id/framelayout"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:layout_below="@id/webview_progress"     android:orientation="vertical" >      <WebView         xmlns:android="http://schemas.android.com/apk/res/android"         android:id="@+id/webview"         android:layout_width="fill_parent"         android:layout_height="fill_parent" /> 

(Manifest.xml)

package="com.wCHfree" android:versionCode="7" android:versionName="1.1" >  <uses-sdk     android:minSdkVersion="11"     android:targetSdkVersion="17" />  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />  <application     android:icon="@drawable/ic_launcher_red"     android:label="@string/app_name"     android:theme="@android:style/Theme.Black" >     <activity         android:name="com.webview.splashScreen.SplashScreenActivity"         android:label="@string/app_name"         android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity>     <activity         android:name="com.webview.splashScreen.WebViewActivity"         android:configChanges="orientation|screenSize|screenLayout"         android:label="@string/app_name"         android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >     </activity>     <activity         android:name="com.google.ads.AdActivity"         android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 
like image 792
digiboomz Avatar asked Apr 03 '13 19:04

digiboomz


People also ask

How do I zoom out in Webview Android?

webview. getSettings(). setLoadWithOverviewMode(true); This will cause the webview to be zoomed out initially.

Is Android Webview deprecated?

This interface was deprecated in API level 12. This interface is now obsolete.

How do I stop video playing on Android Webview?

The following code should get you started on setting up your own Activity's onPause method: @Override public void onPause() { super. onPause(); try { Class. forName("android.

Why is my Webview not working?

You might often face issues in updating the chrome and Android System Webview. To fix this problem, you can reboot your device, check your internet connection, stop auto-updating all apps, clear Google Playstore cache, and storage, leave the beta testing program, and manually update Android WebView app from Playstore.


1 Answers

You need to implement showCustomView & hideCustomView method of WebChromeClient, also You need android:hardwareAccelerated="true" in your AndroidManifest File. I am posting my sample project here. What i have done is kept one Framelayout(customContainer) in my main.xml, and adding view received in showCustomView here, and removing it in onHide. Also hiding/showing webview accordingly. Below code works perfectly on device.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"           package="com.example.webview"           android:versionCode="1"           android:versionName="1.0">     <uses-sdk android:minSdkVersion="8"/>     <uses-permission android:name="android.permission.INTERNET"/>     <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"             android:hardwareAccelerated="true">         <activity android:name="MyActivity"                   android:configChanges="orientation|keyboardHidden"                   android:hardwareAccelerated="true"                   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> 

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"               android:layout_width="fill_parent"               android:layout_height="fill_parent"         >     <WebView             android:layout_width="fill_parent"             android:layout_height="fill_parent"             android:id="@+id/webView"             android:layout_gravity="center"             />     <FrameLayout             android:id="@+id/customViewContainer"             android:layout_width="fill_parent"             android:layout_height="fill_parent"             android:visibility="gone"             /> </LinearLayout> 

video_progress.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:id="@+id/progress_indicator"               android:orientation="vertical"               android:layout_centerInParent="true"               android:layout_width="fill_parent"               android:layout_height="fill_parent">      <ProgressBar android:id="@android:id/progress"                  style="?android:attr/progressBarStyleLarge"                  android:layout_gravity="center"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"/>      <TextView android:paddingTop="5dip"               android:layout_width="wrap_content"               android:layout_height="wrap_content"               android:layout_gravity="center"               android:text="loading"               android:textSize="14sp"               android:textColor="?android:attr/textColorPrimary"/> </LinearLayout> 

MyActivity.java

package com.example.webview;  import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout;  public class MyActivity extends Activity {     private WebView webView;     private FrameLayout customViewContainer;     private WebChromeClient.CustomViewCallback customViewCallback;     private View mCustomView;     private myWebChromeClient mWebChromeClient;     private myWebViewClient mWebViewClient;      /**      * Called when the activity is first created.      */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);         webView = (WebView) findViewById(R.id.webView);          mWebViewClient = new myWebViewClient();         webView.setWebViewClient(mWebViewClient);          mWebChromeClient = new myWebChromeClient();         webView.setWebChromeClient(mWebChromeClient);         webView.getSettings().setJavaScriptEnabled(true);         webView.getSettings().setAppCacheEnabled(true);         webView.getSettings().setBuiltInZoomControls(true);         webView.getSettings().setSaveFormData(true);         webView.loadUrl("http://m.youtube.com");     }      public boolean inCustomView() {         return (mCustomView != null);     }      public void hideCustomView() {         mWebChromeClient.onHideCustomView();     }      @Override     protected void onPause() {         super.onPause();    //To change body of overridden methods use File | Settings | File Templates.         webView.onPause();     }      @Override     protected void onResume() {         super.onResume();    //To change body of overridden methods use File | Settings | File Templates.         webView.onResume();     }      @Override     protected void onStop() {         super.onStop();    //To change body of overridden methods use File | Settings | File Templates.         if (inCustomView()) {             hideCustomView();         }     }      @Override     public boolean onKeyDown(int keyCode, KeyEvent event) {         if (keyCode == KeyEvent.KEYCODE_BACK) {              if (inCustomView()) {                 hideCustomView();                 return true;             }              if ((mCustomView == null) && webView.canGoBack()) {                 webView.goBack();                 return true;             }         }         return super.onKeyDown(keyCode, event);     }      class myWebChromeClient extends WebChromeClient {         private Bitmap mDefaultVideoPoster;         private View mVideoProgressView;          @Override         public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {            onShowCustomView(view, callback);    //To change body of overridden methods use File | Settings | File Templates.         }          @Override         public void onShowCustomView(View view,CustomViewCallback callback) {              // if a view already exists then immediately terminate the new one             if (mCustomView != null) {                 callback.onCustomViewHidden();                 return;             }             mCustomView = view;             webView.setVisibility(View.GONE);             customViewContainer.setVisibility(View.VISIBLE);             customViewContainer.addView(view);             customViewCallback = callback;         }          @Override         public View getVideoLoadingProgressView() {              if (mVideoProgressView == null) {                 LayoutInflater inflater = LayoutInflater.from(MyActivity.this);                 mVideoProgressView = inflater.inflate(R.layout.video_progress, null);             }             return mVideoProgressView;         }          @Override         public void onHideCustomView() {             super.onHideCustomView();    //To change body of overridden methods use File | Settings | File Templates.             if (mCustomView == null)                 return;              webView.setVisibility(View.VISIBLE);             customViewContainer.setVisibility(View.GONE);              // Hide the custom view.             mCustomView.setVisibility(View.GONE);              // Remove the custom view from its container.             customViewContainer.removeView(mCustomView);             customViewCallback.onCustomViewHidden();              mCustomView = null;         }     }      class myWebViewClient extends WebViewClient {         @Override         public boolean shouldOverrideUrlLoading(WebView view, String url) {             return super.shouldOverrideUrlLoading(view, url);    //To change body of overridden methods use File | Settings | File Templates.         }     }  } 

You can clone sample project from here..

like image 110
Akhil Avatar answered Oct 05 '22 23:10

Akhil