元元 2020-02-01
应用mui制作webapp,在之前的基础上实现相机的开启,大部分时间浪费在相机权限的判断与开启。
判断相机权限问题:
//相机权限是否开启,
if(plus.navigator.checkPermission(‘CAMERA‘) == ‘undetermined‘ || plus.navigator.checkPermission(‘CAMERA‘) == ‘denied‘){
    openCamera();
}
相机权限开启:
/*获取相机权限*/
		function openCamera() {
			var msg = "请在应用权限里设置允许使用相机权限";
			mui.confirm(msg, "开启相机权限", ["去开启", "取消"], function(e) {
				if(e.index == 0) {
					if(mui.os.ios) {
						plus.runtime.openURL("app-settings:CAMERA");
					} else {
						var main = plus.android.runtimeMainActivity();
						var Intent = plus.android.importClass("android.content.Intent");
						var Build = plus.android.importClass("android.os.Build");
						var Uri = plus.android.importClass("android.net.Uri");
						var intent = new Intent();
						intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
						if(Build.VERSION.SDK_INT >= 9) { //系统8.0以上的  
							intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
							intent.setData(Uri.fromParts("package", main.getPackageName(), null));
						} else if(Build.VERSION.SDK_INT <= 8) { //系统8.0以下的  
							intent.setAction(Intent.ACTION_VIEW);
							intent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
							intent.putExtra("com.android.settings.ApplicationPkgName", main.getPackageName());
						}
						main.startActivity(intent);
						//  
					}
} else {}
}, ‘div‘)
};
经测试:小米、华为、vivo、苹果手机均可成功运行
/*相机调用*/
		function getImage() {
			var c = plus.camera.getCamera();
			c.captureImage(function(e) {
				plus.io.resolveLocalFileSystemURL(e, function(entry) {
					console.log(e);
					var s = entry.toLocalURL() + "?version=" + new Date().getTime();
					console.log(s);
					document.getElementById("head-img").src = s;
					document.getElementById("head-img1").src = s;
					//变更大图预览的src
					//目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现
					document.querySelector("#__mui-imageview__group .mui-slider-item img").src = s + "?version=" + new Date().getTime();
				}, function(e) {
					console.log("读取拍照文件错误:" + e.message);
				});
			}, function(s) {
				console.log("error" + s.message);
				if(plus.navigator.checkPermission(‘CAMERA‘) == ‘undetermined‘ || plus.navigator.checkPermission(‘CAMERA‘) == ‘denied‘){
					openCamera();
				}
			}, {
				filename: "_doc/head.jpg"
			})
}
		/*相册调用*/
		function galleryImg() {
			plus.gallery.pick(function(a) {
				plus.io.resolveLocalFileSystemURL(a, function(entry) {
					plus.io.resolveLocalFileSystemURL("_doc/", function(root) {
						root.getFile("head.jpg", {}, function(file) {
							//文件已存在
							file.remove(function() {
								console.log("file remove success");
								entry.copyTo(root, ‘head.jpg‘, function(e) {
										var e = e.fullPath + "?version=" + new Date().getTime();
										document.getElementById("head-img").src = e;
										document.getElementById("head-img1").src = e;
										//变更大图预览的src
										//目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现
										document.querySelector("#__mui-imageview__group .mui-slider-item img").src = e + "?version=" + new Date().getTime();;
									},
									function(e) {
										console.log(‘copy image fail:‘ + e.message);
									});
							}, function() {
								console.log("delete image fail:" + e.message);
							});
						}, function() {
							//文件不存在
							entry.copyTo(root, ‘head.jpg‘, function(e) {
									var path = e.fullPath + "?version=" + new Date().getTime();
									document.getElementById("head-img").src = path;
									document.getElementById("head-img1").src = path;
									//变更大图预览的src
									//目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现
									document.querySelector("#__mui-imageview__group .mui-slider-item img").src = path;
								},
								function(e) {
									console.log(‘copy image fail:‘ + e.message);
								});
						});
					}, function(e) {
						console.log("get _www folder fail");
					})
				}, function(e) {
					console.log("读取拍照文件错误:" + e.message);
				});
			}, function(a) {}, {
				filter: "image"
			})
		};