uni-app 安卓10 Android 10 调用相机拍照授权后出错,再次调用无反应
uni-app 安卓10 Android 10 调用相机拍照授权后出错,再次调用无反应
产品分类 | 版本号 | 手机系统 | 手机系统版本号 | 手机厂商 | 手机机型 | 打包方式 |
---|---|---|---|---|---|---|
HTML5+ | 3.1.6 | Android | Android 10 | 华为 | MRX-AN9 | 离线 |
示例代码:
```plus.camera.getCamera().captureImage(function(p) {
plus.io.resolveLocalFileSystemURL(p, function(entry) {
//获取拍照后图片本地路径
var path = entry.toLocalURL();
//单位名称图片选择拍照时
if (selectNum == 0) {
//将单位名称图片DIV样式修改为拍照后的样式
var unit = document.getElementById("unit");
unit.setAttribute("class", "add-btn");
//创建包裹image以及a标签的Div
var addImgDiv = document.createElement("div");
//创建IMage标签
var unitImage = document.createElement("img");
//压缩文件
compress(unitImage, path);
//将图片路径放在隐藏的Input内
document.getElementById("unitImageUrl").value = p + ";";
document.getElementById("unit").insertBefore(addImgDiv, document
.getElementById("addUnitImage"));
addImgDiv.appendChild(unitImage);
imageCss(unitImage, selectNum);
//选择两张照片后将添加按钮隐藏
if (unitImageNum == 1) {
document.getElementById("addUnitImage").setAttribute("style",
"display: none;")
}
} else {
//检查过程选择拍照时
//将检查过程图片DIV样式修改为拍照后的样式
var check = document.getElementById("check");
check.setAttribute("class", "add-btn");
//创建包裹image以及a标签的Div
var addImgDiv = document.createElement("div");
var checkImage = document.createElement("img");
//压缩文件
compress(checkImage, path);
//将图片路径放在隐藏的Input内
document.getElementById("checkImageUrl").value += p + ";";
document.getElementById("check").insertBefore(addImgDiv, document
.getElementById("addCheckImage"));
addImgDiv.appendChild(checkImage);
imageCss(checkImage, selectNum);
//4张照片时隐藏添加按钮
if (checkImageNum == 3) {
document.getElementById("addCheckImage").setAttribute("style",
"display: none;")
}
}
})
}, function(error) {
var code = error.code; // 错误编码
var message = error.message; // 错误描述信息
alert(message);
}, {
index: 1
});
操作步骤:
- 在小米、华为 安卓10 调用拍照提示授权出现此错误,授权后再次调用无反应,无报错,在安卓5.1的华为平板上则无此问题
预期结果:
- 调用相机拍照
实际结果:
- 相机调用不成功
bug描述:
2021-03-20 13:35:04.851 19692-20121/c.a.p.b.d.d E/libc: Access denied finding property "vendor.camera.hal1.packagelist"
2021-03-20 13:35:04.862 19692-20121/c.a.p.b.d.d W/CameraBase: An error occurred while connecting to camera 0: Status(-8, EX_SERVICE_SPECIFIC): '1: validateClientPermissionsLocked:1026: Caller "c.a.p.b.d.d" (PID 10242, UID 19692) cannot open camera "0" without camera permission'
2021-03-20 13:35:04.863 19692-20121/c.a.p.b.d.d W/System.err: java.lang.RuntimeException: Fail to connect to camera service
2021-03-20 13:35:04.863 19692-20121/c.a.p.b.d.d W/System.err: at android.hardware.Camera.<init>(Camera.java:637)
2021-03-20 13:35:04.863 19692-20121/c.a.p.b.d.d W/System.err: at android.hardware.Camera.open(Camera.java:476)
2021-03-20 13:35:04.864 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.js.camera.a.<init>(SourceFile:28)
2021-03-20 13:35:04.864 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.js.camera.CameraFeatureImpl.execute(SourceFile:165)
2021-03-20 13:35:04.864 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.h.b.a(SourceFile:137)
2021-03-20 13:35:04.864 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.h.b.b(SourceFile:3)
2021-03-20 13:35:04.865 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.h.b.processEvent(SourceFile:144)
2021-03-20 13:35:04.865 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.f.b.c.dispatchEvent(SourceFile:22)
2021-03-20 13:35:04.865 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.common.core.ui.l.processEvent(SourceFile:2)
2021-03-20 13:35:04.866 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.common.core.ui.h.exec(SourceFile:10)
2021-03-20 13:35:04.866 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.common.core.ui.h.prompt(SourceFile:18)
2021-03-20 13:35:04.866 19692-20121/c.a.p.b.d.d W/System.err: at io.dcloud.common.util.Birdge.prompt(SourceFile:1)
2021-03-20 13:35:04.867 19692-20121/c.a.p.b.d.d W/System.err: at android.os.MessageQueue.nativePollOnce(Native Method)
2021-03-20 13:35:04.867 19692-20121/c.a.p.b.d.d W/System.err: at android.os.MessageQueue.next(MessageQueue.java:336)
2021-03-20 13:35:04.867 19692-20121/c.a.p.b.d.d W/System.err: at android.os.Looper.loop(Looper.java:181)
2021-03-20 13:35:04.867 19692-20121/c.a.p.b.d.d W/System.err: at android.os.HandlerThread.run(HandlerThread.java:67)
2021-03-20 13:35:06.900 19692-19692/c.a.p.b.d.d E/Html5Plus-onResume: 1616218506900
更多关于uni-app 安卓10 Android 10 调用相机拍照授权后出错,再次调用无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
W/CameraBase: An error occurred while connecting to camera 0: Status(-8, EX_SERVICE_SPECIFIC): ‘1: validateClientPermissionsLocked:1073: Caller “com.hola.cc” (PID 10171, UID 6939) cannot open camera “0” without camera permission’
W/System.err: java.lang.RuntimeException: Fail to connect to camera service
W/System.err: at android.hardware.Camera.<init>(Camera.java:573)
W/System.err: at android.hardware.Camera.open(Camera.java:418)
at io.dcloud.js.camera.a.<init>(SourceFile:28)
at io.dcloud.js.camera.CameraFeatureImpl.execute(SourceFile:165)
W/System.err: at io.dcloud.h.b.a(SourceFile:137)
at io.dcloud.h.b.b(SourceFile:3)
at io.dcloud.h.b.processEvent(SourceFile:144)
W/System.err: at io.dcloud.f.b.c.dispatchEvent(SourceFile:22)
at io.dcloud.common.core.ui.l.processEvent(SourceFile:2)
W/System.err: at io.dcloud.common.core.ui.h.exec(SourceFile:10)
at io.dcloud.common.core.ui.h.prompt(SourceFile:18)
at io.dcloud.common.util.Birdge.prompt(SourceFile:1)
W/System.err: at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:363)
at android.os.Looper.loop(Looper.java:176)
W/System.err: at android.os.HandlerThread.run(HandlerThread.java:67)
更多关于uni-app 安卓10 Android 10 调用相机拍照授权后出错,再次调用无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html
同问,小米8 安卓10
Access denied finding property “vendor.camera.hal1.packagelist”
cannot open camera “0” without camera permission’
W/System.err: java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.<init>(Camera.java:637)
W/System.err: at android.hardware.Camera.open(Camera.java:476)
at io.dcloud.js.camera.g.<init>(:11)
at io.dcloud.js.camera.CameraFeatureImpl.execute(:17)
at io.dcloud.c.b.a(:90)
at io.dcloud.c.b.b(:3)
W/System.err: at io.dcloud.c.b.processEvent(:36)
at io.dcloud.a.b.j.dispatchEvent(:7)
at io.dcloud.common.core.ui.na.processEvent(:2)
at io.dcloud.common.core.ui.I.exec(:6)
W/System.err: at io.dcloud.common.core.ui.I.prompt(:11)
at io.dcloud.common.util.Birdge.prompt(:1)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:336)
W/System.err: at android.os.Looper.loop(Looper.java:181)
at android.os.HandlerThread.run(HandlerThread.java:67)
https://nativesupport.dcloud.net.cn/AppDocs/FAQ/android
离线打包Android 10上无法启动相机
在application节点下添加provider节点
<provider
android:name="io.dcloud.common.util.DCloud_FileProvider"
android:authorities="${apk.applicationId}.dc.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/dcloud_file_provider" />
</provider>
${apk.applicationId}须替换成应用的包名。
小米8手机 安卓10 已解决问题,其他机型测试中…
谢谢您
这是Android 10权限管理机制变化导致的相机权限问题。从错误日志cannot open camera "0" without camera permission
可以看出应用没有获得相机权限。
在Android 10中,权限请求和回调机制有所变化:
- 动态权限请求:需要在调用相机前确保已获取
CAMERA
权限,使用plus.android.requestPermissions
进行动态申请:
plus.android.requestPermissions(['android.permission.CAMERA'], function(e){
if(e.deniedAlways.length > 0){
// 用户永久拒绝
plus.nativeUI.alert('需要相机权限才能拍照');
}else if(e.denied.length > 0){
// 用户拒绝
plus.nativeUI.alert('请允许相机权限');
}else{
// 权限已授予,调用相机
captureImage();
}
}, function(error){
console.log('权限请求错误:' + JSON.stringify(error));
});
- 权限状态检查:在调用相机前检查权限状态:
plus.android.requestPermissions(['android.permission.CAMERA'], function(e){
// 权限回调处理
}, function(error){
console.log('权限请求错误:' + JSON.stringify(error));
});
- manifest配置:确保manifest.json中已声明相机权限:
{
"permissions": {
"Camera": {
"description": "相机权限"
}
}
}