一开始使用了MediaPlayer,但是一直报ContentProviderNotFound的错误,后来才发现别人提供的是一个HTML页面,所以要使用WebView。
一、在AndroidManifest.xml中加入:
(否则会报net::ERR_CACHE_MISS)
<uses-permission android:name="android.permission.INTERNET" />
application节点里:
android:hardwareAccelerated ="true"
Activity节点里:
android:hardwareAccelerated="true"
android:configChanges="orientation|screenSize|keyboardHidden"
二、布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/wvBookPlay"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
<FrameLayout
android:id="@+id/flVideoContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</RelativeLayout>
三、MainActivity:
private WebView wvBookPlay;
//private TextView tvUrl;
private FrameLayout flVideoContainer;
String url = "http://(IP):9000/javascript_simple.html";
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wvBookPlay = (WebView)findViewById(R.id.wvBookPlay);
flVideoContainer = findViewById(R.id.flVideoContainer);
wvBookPlay.getSettings().setJavaScriptEnabled(true);
wvBookPlay.getSettings().setUseWideViewPort(true);
wvBookPlay.getSettings().setLoadWithOverviewMode(true);
wvBookPlay.getSettings().setAllowFileAccess(true);
wvBookPlay.getSettings().setSupportZoom(true);
wvBookPlay.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
try {
if (Build.VERSION.SDK_INT >= 16) {
Class<?> clazz = wvBookPlay.getSettings().getClass();
Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
if (method != null) {
method.invoke(wvBookPlay.getSettings(), true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
wvBookPlay.getSettings().setPluginState(WebSettings.PluginState.ON);
wvBookPlay.getSettings().setDomStorageEnabled(true);// 必须保留,否则无法播放优酷视频,其他的OK
//wvBookPlay.setWebChromeClient(new MyWebChromeClient());// 重写一下,有的时候可能会出现问题
wvBookPlay.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(url);
return true;
//return super.shouldOverrideUrlLoading(view, request);
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
wvBookPlay.getSettings().setMixedContentMode(wvBookPlay.getSettings().MIXED_CONTENT_ALWAYS_ALLOW);
}
CookieManager cookieManager = CookieManager.getInstance();
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("android");
cookieManager.setCookie(url, stringBuffer.toString());
cookieManager.setAcceptCookie(true);
wvBookPlay.loadUrl(url);
}
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
switch (config.orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
break;
case Configuration.ORIENTATION_PORTRAIT:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
break;
}
}
private class MyWebChromeClient extends WebChromeClient {
WebChromeClient.CustomViewCallback mCallback;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.i("ToVmp","onShowCustomView");
fullScreen();
wvBookPlay.setVisibility(View.GONE);
flVideoContainer.setVisibility(View.VISIBLE);
flVideoContainer.addView(view);
mCallback = callback;
super.onShowCustomView(view, callback);
}
@Override
public void onHideCustomView() {
Log.i("ToVmp","onHideCustomView");
fullScreen();
wvBookPlay.setVisibility(View.VISIBLE);
flVideoContainer.setVisibility(View.GONE);
flVideoContainer.removeAllViews();
super.onHideCustomView();
}
// @Override
// public boolean shouldOverrideUrlLoading(WebView view, String url) {
// view.loadUrl(url);
// return true;
// }
}
private void fullScreen() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.i("ToVmp","横屏");
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Log.i("ToVmp","竖屏");
}
}
@Override
protected void onDestroy() {
if (wvBookPlay != null) {
wvBookPlay.destroy();
}
super.onDestroy();
}