uni-app中targetSDK设置为30时 input type=file 拍照时无法返回照片(有些机型)

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app中targetSDK设置为30时 input type=file 拍照时无法返回照片(有些机型)

打包时注意事项

  • 打包时把targetSDK 改为30,有些机型在input type=file 的时候拍照后获取不了文件;
1 回复

在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>

注意事项

  1. 权限管理:确保你的应用已经请求并获得了必要的权限,如android.permission.CAMERAandroid.permission.WRITE_EXTERNAL_STORAGE(在Android 10及以上,WRITE_EXTERNAL_STORAGE权限在某些情况下可能不再需要,但CAMERA是必须的)。

  2. 兼容性问题:虽然chooseImage API在大多数设备上表现良好,但不同设备和不同版本的Android系统可能仍然存在细微差异。务必在多个设备和系统版本上进行测试。

  3. 用户体验:考虑到用户体验,可以在拍照前后添加一些提示信息,比如拍照成功或失败的提示。

通过上述方法,你可以有效地解决在targetSDK为30时,<input type="file">拍照无法返回照片的问题,同时提高应用的兼容性和用户体验。

回到顶部