Android10(华为Mate30)获取图片路径失败,拍照或从相册选择图片后无法显示

在使用华为Mate30是从图库选择图片,本地无法显示,其他手机没问题,发现是兼容Android10的问题,Android10下本app的私有文件是不需要权限的,访问其他应用权限需要权限 android 10 不支持用path路径显示图片,只支持Uri的形式

修改方法

AndroidManifest.xml 中增加 android:requestLegacyExternalStorage="true" 就可以了 ,经测试确实解决问题了

    <application
        android:name=".app.App"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher_logo"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:roundIcon="@mipmap/ic_launcher_logo"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:requestLegacyExternalStorage="true"  //仍旧使用旧的存储方法
        >

该方法只是官方暂时提供给没时间适配的开发人员,官方不介意这么做,并且这个方法到2020年不能再使用

想了解Android10存储策略的请看这里
Android Q分区存储权限变更及适配
Android Q中文件沙盒模式读写文件
Android 10 加载手机本地图片
Android 调用相机拍照,适配到Android 10

Android10(华为Mate30)获取图片路径失败,拍照或从相册选择图片后无法显示_第1张图片

Android10(华为Mate30)获取图片路径失败,拍照或从相册选择图片后无法显示_第2张图片

目前github 拍照图片选择器轮子大名鼎鼎的 TakePhoto 已经停止更新,支持Android10的找到一个

ImageSelector 支持AndroidX
发现支持Android10,不足地方是选择图库时图片多时加载慢,上传图片时file获取不对,这个问题还在研究

implementation 'com.github.donkingliang:ImageSelector:2.0.1' //androidx
implementation 'com.github.donkingliang:ImageSelector:1.8.2' //非androidx

//使用方法

 //单选
 ImageSelector.builder()
     .useCamera(true) // 设置是否使用拍照
     .setSingle(true)  //设置是否单选
     .canPreview(true) //是否可以预览图片,默认为true
     .start(this, REQUEST_CODE); // 打开相册

//仅拍照
ImageSelector.builder()
    .onlyTakePhoto(true)  // 仅拍照,不打开相册
    .start(this, REQUEST_CODE);
    
//拍照并剪裁
ImageSelector.builder()
    .setCrop(true) // 设置是否使用图片剪切功能。
    .setCropRatio(1.0f) // 图片剪切的宽高比,默认1.0f。宽固定为手机屏幕的宽。
    .onlyTakePhoto(true)  // 仅拍照,不打开相册
    .start(this, REQUEST_CODE);

记得在自己的AndroidManifest.xml增加这三个Activity

       <activity
            android:name="com.donkingliang.imageselector.ImageSelectorActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
        <activity
            android:name="com.donkingliang.imageselector.PreviewActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
        <activity
            android:name="com.donkingliang.imageselector.ClipImageActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

你可能感兴趣的:(Android10(华为Mate30)获取图片路径失败,拍照或从相册选择图片后无法显示)