usar toda studio programacion pantalla full completa app activity android eclipse video webview player

toda - La aplicación Android Webview no permitirá que el reproductor de video entre en pantalla completa



usar toda la pantalla android (1)

Hola, creé una aplicación de vista web para mi sitio de videos. El diseño del sitio es un híbrido que se carga para usuarios móviles. Solo los videos compatibles con dispositivos móviles se cargan en el híbrido. Los jugadores son de Vk, dailymotion, youtube, quicktime. Los videos solo se reproducen en sdk 11 y versiones posteriores, pero cuando hago clic en el botón del reproductor para ir a pantalla completa, solo detiene la reproducción del video mientras nunca se inicia el modo de pantalla completa. Estoy incluyendo tanto código como puedo con la esperanza de que alguien pueda ayudarme. Lo busqué en Google hasta la muerte sin ningún progreso. Cualquier ayuda sería muy apreciada.

(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" />


Necesita implementar el método showCustomView & hideCustomView de WebChromeClient, también necesita android:hardwareAccelerated="true" en su archivo AndroidManifest. Estoy publicando mi proyecto de muestra aquí. Lo que he hecho es mantener un Framelayout (customContainer) en mi main.xml, y agregar la vista recibida en showCustomView aquí, y eliminarla en onHide. También ocultar / mostrar webview en consecuencia. El siguiente código funciona perfectamente en el dispositivo.

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. } } }

Puede clonar un proyecto de muestra desde aquí ...