在播放优酷视频, 点击全屏的时候, 会黑屏, 而不显示需要全屏的view
试过各种方法, 发现有一些细节需要注意:
1. demo的Manifest Activity需要设置为: 全屏, 横屏
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
android:screenOrientation="landscape" />注意: 此处如果不设置为 横屏 点击全屏也会失败的
有的说播放flash是需要在Activity添加硬件加速的属性, 这个demo是在程序判断, 所以没有添加
2. 添加权限:
3. 退出视频播放会出现视频还没停止的问题:
@Override
public void onPause() {// 继承自Activity
super.onPause();
mWebView.onPause();
}
@Override
public void onResume() {// 继承自Activity
super.onResume();
mWebView.onResume();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
mWebView.loadData("", "text/html; charset=UTF-8", null);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
当按下返回时, 设置Webview加载空
代码:
xml文件: act_flashplay.xml
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/fullscreen_custom_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/webview_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
java文件: ActFlashPlay.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import com.example.myalldemo.R;
public class ActFlashPlay extends Activity {
private FrameLayout mFullscreenContainer;
private FrameLayout mContentView;
private View mCustomView = null;
private WebView mWebView;
private String s = "
swf"+ "
+ " width=\"80%\" height=\"80%\" align=\"middle\" allowScriptAccess=\"always\""
+ " allowFullScreen=\"true\" wmode=\"transparent\" "
+ "type=\"application/x-shockwave-flash\">
";@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_flashplay);
initViews();
initWebView();
if (getPhoneAndroidSDK() >= 14) {// 4.0 需打开硬件加速
getWindow().setFlags(0x1000000, 0x1000000);
}
mWebView.loadData(s, "text/html; charset=UTF-8", null);
//mWebView.loadUrl("file:///android_asset/1234.html");
}
private void initViews() {
mFullscreenContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);
mContentView = (FrameLayout) findViewById(R.id.main_content);
mWebView = (WebView) findViewById(R.id.webview_player);
}
private void initWebView() {
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setPluginState(PluginState.ON);
// settings.setPluginsEnabled(true);
settings.setAllowFileAccess(true);
settings.setLoadWithOverviewMode(true);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.setWebViewClient(new MyWebViewClient());
}
class MyWebChromeClient extends WebChromeClient {
private CustomViewCallback mCustomViewCallback;
private int mOriginalOrientation = 1;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// TODO Auto-generated method stub
onShowCustomView(view, mOriginalOrientation, callback);
super.onShowCustomView(view, callback);
}
public void onShowCustomView(View view, int requestedOrientation,
WebChromeClient.CustomViewCallback callback) {
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
if (getPhoneAndroidSDK() >= 14) {
mFullscreenContainer.addView(view);
mCustomView = view;
mCustomViewCallback = callback;
mOriginalOrientation = getRequestedOrientation();
mContentView.setVisibility(View.INVISIBLE);
mFullscreenContainer.setVisibility(View.VISIBLE);
mFullscreenContainer.bringToFront();
setRequestedOrientation(mOriginalOrientation);
}
}
public void onHideCustomView() {
mContentView.setVisibility(View.VISIBLE);
if (mCustomView == null) {
return;
}
mCustomView.setVisibility(View.GONE);
mFullscreenContainer.removeView(mCustomView);
mCustomView = null;
mFullscreenContainer.setVisibility(View.GONE);
try {
mCustomViewCallback.onCustomViewHidden();
} catch (Exception e) {
}
// Show the content view.
setRequestedOrientation(mOriginalOrientation);
}
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
}
public static int getPhoneAndroidSDK() {
// TODO Auto-generated method stub
int version = 0;
try {
version = Integer.valueOf(android.os.Build.VERSION.SDK);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return version;
}
@Override
public void onPause() {// 继承自Activity
super.onPause();
mWebView.onPause();
}
@Override
public void onResume() {// 继承自Activity
super.onResume();
mWebView.onResume();
}
}
注: demo中的方法是loadUrl, load的是asset文件夹下的1234.html, 可以播放视频, 同样的,上面代码中用loadData也是可以的
大家可以试一试, 有什么问题可以一起讨论