1***@qq.com
1***@qq.com
  • 发布:2023-11-02 09:10
  • 更新:2023-11-02 09:10
  • 阅读:286

【报Bug】最新安卓SDK 3.94 版本,拍照功能无法使用

分类:uni小程序sdk

产品分类: uni小程序SDK

手机系统: Android

手机系统版本号: Android 13

手机厂商: 华为

手机机型: 华为畅享20Pro

页面类型: vue

SDK版本号: 3.94

示例代码:

<template>
<view>
<page-head :title="title"></page-head>
<view class="uni-common-mt">
<form>
<view class="uni-list">
<view class="uni-list-cell">
<view class="uni-list-cell-left">
<view class="uni-label">图片来源</view>
</view>
<view class="uni-list-cell-right">
<picker :range="sourceType" @change="sourceTypeChange" :value="sourceTypeIndex" mode="selector">
<view class="uni-input">{{sourceType[sourceTypeIndex]}}</view>
</picker>
</view>
</view>

                <view class="uni-list-cell">  
                    <view class="uni-list-cell-left">  
                        <view class="uni-label">图片质量</view>  
                    </view>  
                    <view class="uni-list-cell-right">  
                        <picker :range="sizeType" @change="sizeTypeChange" :value="sizeTypeIndex" mode="selector">  
                            <view class="uni-input">{{sizeType[sizeTypeIndex]}}</view>  
                        </picker>  
                    </view>  
                </view>  

                <view class="uni-list-cell">  
                    <view class="uni-list-cell-left">  
                        <view class="uni-label">数量限制</view>  
                    </view>  
                    <view class="uni-list-cell-right">  
                        <picker :range="count" @change="countChange" mode="selector">  
                            <view class="uni-input">{{count[countIndex]}}</view>  
                        </picker>  
                    </view>  
                </view>  
            </view>  

            <view class="uni-list list-pd">  
                <view class="uni-list-cell cell-pd">  
                    <view class="uni-uploader">  
                        <view class="uni-uploader-head">  
                            <view class="uni-uploader-title">点击可预览选好的图片</view>  
                            <view class="uni-uploader-info">{{imageList.length}}/9</view>  
                        </view>  
                        <view class="uni-uploader-body">  
                            <view class="uni-uploader__files">  
                                <block v-for="(image,index) in imageList" :key="index">  
                                    <view class="uni-uploader__file">  
                                        <image class="uni-uploader__img" :src="image" :data-src="image" @tap="previewImage"></image>  
                                    </view>  
                                </block>  
                                <view class="uni-uploader__input-box">  
                                    <view class="uni-uploader__input" @tap="chooseImage"></view>  
                                </view>  
                            </view>  
                        </view>  
                    </view>  
                </view>  
            </view>  
        </form>  
    </view>  
</view>  

</template>
<script>
import permision from "@/common/permission.js"
var sourceType = [
['camera'],
['album'],
['camera', 'album']
]
var sizeType = [
['compressed'],
['original'],
['compressed', 'original']
]
export default {
data() {
return {
title: 'choose/previewImage',
imageList: [],
sourceTypeIndex: 2,
sourceType: ['拍照', '相册', '拍照或相册'],
sizeTypeIndex: 2,
sizeType: ['压缩', '原图', '压缩或原图'],
countIndex: 8,
count: [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
},
onUnload() {
this.imageList = [],
this.sourceTypeIndex = 2,
this.sourceType = ['拍照', '相册', '拍照或相册'],
this.sizeTypeIndex = 2,
this.sizeType = ['压缩', '原图', '压缩或原图'],
this.countIndex = 8;
},
methods: {
sourceTypeChange: function(e) {
this.sourceTypeIndex = parseInt(e.detail.value)
},
sizeTypeChange: function(e) {
this.sizeTypeIndex = parseInt(e.detail.value)
},
countChange: function(e) {
this.countIndex = e.detail.value;
},
chooseImage: async function() {
// #ifdef APP-PLUS
// TODO 选择相机或相册时 需要弹出actionsheet,目前无法获得是相机还是相册,在失败回调中处理
if (this.sourceTypeIndex !== 2) {
let status = await this.checkPermission();
if (status !== 1) {
return;
}
}
// #endif

            if (this.imageList.length === 9) {  
                let isContinue = await this.isFullImg();  
                console.log("是否继续?", isContinue);  
                if (!isContinue) {  
                    return;  
                }  
            }  
            uni.chooseImage({  
                sourceType: sourceType[this.sourceTypeIndex],  
                sizeType: sizeType[this.sizeTypeIndex],  
                count: this.imageList.length + this.count[this.countIndex] > 9 ? 9 - this.imageList.length : this.count[this.countIndex],  
                success: (res) => {  
                    this.imageList = this.imageList.concat(res.tempFilePaths);  
                },  
                fail: (err) => {  
                    console.log("err: ",err);  
                    // #ifdef APP-PLUS  
                    if (err['code'] && err.code !== 0 && this.sourceTypeIndex === 2) {  
                        this.checkPermission(err.code);  
                    }  
                    // #endif  
                    // #ifdef MP  
                    if(err.errMsg.indexOf('cancel') !== '-1'){  
                        return;  
                    }  
                    uni.getSetting({  
                        success: (res) => {  
                            let authStatus = false;  
                            switch (this.sourceTypeIndex) {  
                                case 0:  
                                    authStatus = res.authSetting['scope.camera'];  
                                    break;  
                                case 1:  
                                    authStatus = res.authSetting['scope.album'];  
                                    break;  
                                case 2:  
                                    authStatus = res.authSetting['scope.album'] && res.authSetting['scope.camera'];  
                                    break;  
                                default:  
                                    break;  
                            }  
                            if (!authStatus) {  
                                uni.showModal({  
                                    title: '授权失败',  
                                    content: 'Hello uni-app需要从您的相机或相册获取图片,请在设置界面打开相关权限',  
                                    success: (res) => {  
                                        if (res.confirm) {  
                                            uni.openSetting()  
                                        }  
                                    }  
                                })  
                            }  
                        }  
                    })  
                    // #endif  
                }  
            })  
        },  
        isFullImg: function() {  
            return new Promise((res) => {  
                uni.showModal({  
                    content: "已经有9张图片了,是否清空现有图片?",  
                    success: (e) => {  
                        if (e.confirm) {  
                            this.imageList = [];  
                            res(true);  
                        } else {  
                            res(false)  
                        }  
                    },  
                    fail: () => {  
                        res(false)  
                    }  
                })  
            })  
        },  
        previewImage: function(e) {  
            var current = e.target.dataset.src  
            uni.previewImage({  
                current: current,  
                urls: this.imageList  
            })  
        },  
        async checkPermission(code) {  
            let type = code ? code - 1 : this.sourceTypeIndex;  
            let status = permision.isIOS ? await permision.requestIOS(sourceType[type][0]) :  
                await permision.requestAndroid(type === 0 ? 'android.permission.CAMERA' :  
                    'android.permission.READ_EXTERNAL_STORAGE');  

            if (status === null || status === 1) {  
                status = 1;  
            } else {  
                uni.showModal({  
                    content: "没有开启权限",  
                    confirmText: "设置",  
                    success: function(res) {  
                        if (res.confirm) {  
                            permision.gotoAppSetting();  
                        }  
                    }  
                })  
            }  

            return status;  
        }  
    }  
}  

</script>

<style>
.cell-pd {
padding: 22rpx 30rpx;
}

.list-pd {  
    margin-top: 50rpx;  
}  

</style>

操作步骤:

下载最新SDK 3.94 版本,使用demo的图片功能,点击选择拍照无任何响应

预期结果:

点击拍照可以正常使用

实际结果:

实际不能用

bug描述:

下载最新安卓SDK 3.94 版本,无法调用拍照功能,但是可以选择本地图库。然后用demo里的示例进行测试发现demo里的拍照功能也无法使用,换成3.8.12版本是没问题的。

2023-11-02 09:10 负责人:无 分享
已邀请:

要回复问题请先登录注册