uni-app中targetSDK设置为30时 input type=file 拍照时无法返回照片(有些机型)
uni-app中targetSDK设置为30时 input type=file 拍照时无法返回照片(有些机型)
打包时注意事项
- 打包时把targetSDK 改为30,有些机型在input type=file 的时候拍照后获取不了文件;
在uni-app中,当targetSDK
设置为30时,可能会遇到在Android设备上使用<input type="file">
进行拍照后无法返回照片的问题。这通常是由于Android 10(API Level 29)及以上版本对权限和文件访问的变更导致的。为了解决这个问题,你可以尝试以下方法,利用uni-app的API和原生插件来处理文件选择。
解决方案:使用uni-app的chooseImage
API
uni-app提供了丰富的API来处理文件选择,特别是chooseImage
,它可以在不依赖于HTML原生<input type="file">
的情况下,更好地处理文件选择,特别是拍照后的文件返回。
示例代码
// 在你的Vue组件中
export default {
methods: {
takePhoto() {
uni.chooseImage({
count: 1, // 只允许选择一张图片
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图
sourceType: ['camera'], // 限定从相机选择
success: (res) => {
// tempFilePath可以作为img标签的src属性显示图片
const tempFilePaths = res.tempFilePaths;
console.log('拍照成功,文件路径:', tempFilePaths[0]);
// 你可以在这里将图片路径传递给其他逻辑处理
},
fail: (err) => {
console.error('拍照失败:', err);
}
});
}
}
}
触发拍照
你可以在页面的按钮点击事件中调用takePhoto
方法:
<template>
<view>
<button @click="takePhoto">拍照</button>
</view>
</template>
注意事项
-
权限管理:确保你的应用已经请求并获得了必要的权限,如
android.permission.CAMERA
和android.permission.WRITE_EXTERNAL_STORAGE
(在Android 10及以上,WRITE_EXTERNAL_STORAGE权限在某些情况下可能不再需要,但CAMERA是必须的)。 -
兼容性问题:虽然
chooseImage
API在大多数设备上表现良好,但不同设备和不同版本的Android系统可能仍然存在细微差异。务必在多个设备和系统版本上进行测试。 -
用户体验:考虑到用户体验,可以在拍照前后添加一些提示信息,比如拍照成功或失败的提示。
通过上述方法,你可以有效地解决在targetSDK
为30时,<input type="file">
拍照无法返回照片的问题,同时提高应用的兼容性和用户体验。