Android WebView \"曲线救国\" 实现全屏播放

无简介

目的

实现在webview中视频全屏播放。

遇到的问题

点击全屏按钮时没有调用onShowCustomView。导致在代码中无法处理全屏事件。

解决方法

使用加速度传感器,监控手机的方向变化,根据手机的方向变化来判断是否应该变为横向,如果是横向的话视频会全屏。

主要代码

  • 1,首先获得SensorManager对象

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

  • 2.在onResume中进行注册

@Override
protected void onResume() {
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
super.onResume();
}

应为我的activity继承了SensorEventListener,所以上面的代码中使用的是this。* 3.在onSensorChanged方法中根据xyz值进行判断修改横屏竖屏

@Override
public void onSensorChanged(SensorEvent event) {
final int sensorType = event.sensor.getType();
//values[0]:X轴,values[1]:Y轴,values[2]:Z轴
final float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
x = Math.abs(x);
y = Math.abs(y);
z = Math.abs(z);
if ((x >= 6 && z < = 6) (x >= 6 && y >= 6)) {
Log.i(TAG, “heng” + x + “–” + y + “–” + z);
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
} else if ((x < = 3 && z <= 6) (z <= 6 && y <= 3)) {
Log.i(TAG, “shu” + x + “–” + y + “–” + z);
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}

还有待解决的问题:

这个解决的是网页内部有视频,但是没有视频都是文字呢?这样如果也横屏的话就不太好了,这个问题正在想(2015年8月31日12:11:25) 想到了一个解决办法,不过可能会有点问题(网络加载慢或者重定向),下面是解决办法:

在WebViewClient中的onPageFinished方法中获得html的整体代码,然后在里面寻找播放的关键词。

  • 第一步:

webView.addJavascriptInterface(jsif, “local_obj”);

  • 第二步

webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl(“javascript:window.local_obj.showSource(‘’+” +
“document.getElementsByTagName(‘html’)[0].innerHTML+‘’);”);
super.onPageFinished(view, url);
}
});

  • 第三步

@JavascriptInterface
public void showSource(String html) {
if (html.contains(“yk-player-inner”)) {
Log.d(“sumile”, “优酷播放器”);
} else if (html.contains(“play-view”)) {
Log.d(“sumile”, “土豆播放器”);
}
}

[v_qing]可能会有问题,这只是我的一个想法。如果有什么更好的办法请下面留言告诉我,拜谢~[/v_qing]

[dl href=‘http://pan.baidu.com/s/1hqfcdEW’]测试代码下载(AndroidStudio版)[/dl]

[dl href=‘http://pan.baidu.com/s/1oHFOU’]测试代码下载(添加播放器判断)[/dl]

里面就4个类,Eclipse直接拷过去就可以了。

-------------本文结束  感谢您的阅读-------------
下次一定