之所以用“弹”不用“谈”,是弹弹弹...
在使用MUI来开发接近原生App的体验效果时,遇到很多坑。比如视频拍摄时,如果不考虑视频时长,使用H5+plus API还是比较可观的,但你若使用了NJS的方式去使用原生的摄像头录制方式的话,需要设置其像素为高才能达到好的体验(但某厂的设备在高像素下不支持)。所以这就需要你去开发SDK插件,可以使用三方的视频录制插件(目前还未进行开发)。
在这里我使用的NJS的方式去录制,后续会编写一套使用三方录制视频的Demo,敬请期待吧。
1. 点击按钮
<a id="videoCam" class="mui-icon mui-icon-videocam mui-pull-left"></a>
2. 监听按钮调用原生摄像头拍摄视频
//拍摄视频
function captureVideo() {
var TIMEOUT = 5; //录像时间 5 秒
// 调用原生android摄像头
var VIDEOZOOM = 200;
var MediaStore = plus.android.importClass("android.provider.MediaStore");
var Intent = plus.android.importClass("android.content.Intent");
// 导入后可以使用new方法创建类的示例对象
var intent = new Intent("android.media.action.VIDEO_CAPTURE");
intent.putExtra("android.intent.extra.videoQuality", 0); //0 means low quality, 1 means high quality
intent.putExtra("android.intent.extra.durationLimit", TIMEOUT); //设置录像时间,5秒钟
var main = plus.android.runtimeMainActivity();
main.startActivityForResult(intent, VIDEOZOOM);
// 获取返回参数
main.onActivityResult = function(requestCode, resultCode, data) {
if (requestCode == 200 && resultCode == -1) {
var context = main;
plus.android.importClass(data);
var uri = data.getData();
var resolver = context.getContentResolver();
plus.android.importClass(resolver);
var cursor = resolver.query(uri, null, null, null, null);
plus.android.importClass(cursor);
cursor.moveToFirst();
var column = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
// 获取录制的视频路径
var path = cursor.getString(column);
if (path) {
mui.openWindow({
url: "videocam.html",
id: "videocam",
extras: {
videoPathUrl: path
},
createNew: false, //是否重复创建同样id的webview,默认为false:不重复创建,直接显示
});
} else {
mui.toast("录制小视频失败!");
}
} else {
mui.toast("您取消了录制视频!");
}
}
}
在上面代码中,我们在录制完成后会获取到视频的路径。我们通过mui.openWindow()
函数并传值在新页面进行视频上传。