最近有一个H5项目需要打包成APP,通过HBuilderx中的原生云打包(具体过程百度一下很详细),项目中需要获取相机的权限,程序中是通过 navigator.myGetUserMedia调取相机的,但是一打包就不能实现,必须通过手动给权限才能成功。
最后各种找资料,得出能直接打开权限,但第一次进入还是不能用,只有退出重新进入APP才能调取。
于是就想着是不是在 进入程序的一瞬间直接获取权限,然后直接在重启APP,这样应该能平滑的打开相机权限并不影响用户体验。下面就是具体代码,这里是找的资料调取二维码的,但我们只要把相机的权限打开就好了,所以相机画面直接屏蔽掉。
document.addEventListener('plusready',function () { // 这里一定要加上 不然会报push 未定义
plus.android.requestPermissions(['android.permission.CAMERA'], function(e){
if(e.deniedAlways.length>0){ //权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
//alert('永久');
document.addEventListener("plusready", onPlusReady, false);
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady() {
// 创建扫码控件来调获取手机的相机权限
barcode = plus.barcode.create('barcode', [plus.barcode.QR], {
top: '-9999', //改为-9999px隐藏该页面
left: '0',
width: '100%',
height: '500px',
position: 'static'
});
//plus.webview.currentWebview().append(barcode);;
//barcode.start();开始扫码识别(我们把这句代码注释了,因为我们不需要扫描任何东西)
}
//上面打开权限后,这里直接重启APP
plus.runtime.restart();
}
if(e.deniedPresent.length>0){ //权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
//alert('临时 ');
}
if(e.granted.length>0){ //权限被允许
//调用依赖获取定位权限的代码
//alert('允许!!! ');
}
}, function(e){
alert('Request Permissions error:'+JSON.stringify(e));
});
},false);
版权声明:本文为weixin_42489436原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。