android10获取相册失败的解决方式

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android10获取相册失败的解决方式相关的知识,希望对你有一定的参考价值。

想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注


使用android 10手机开发的时候,比如拍照或者选择相册图片的时候会获取失败,网上查了一下说在AndroidManifest.xml 文件的application中添加这样一行代码就好了,

       android:requestLegacyExternalStorage="true"

但我试了一下还是不行,后来通过打印图片的路径才发现问题所在,正常的路径一般都是这样的

/storage/emulated/0/paisamore/1603769512132.png

但我使用android 10手机测试的时候发现路径是这样的

content://media/external/file/175256

也就是说他前面是content开头的,我们通过
BitmapFactory.decodeFile(path)
是加载不成功的。

android10读取相册返回以content开头的路径也不是绝对的,我们也可以让他返回那种正常的路径,这样就可以使用BitmapFactory.decodeFile(path)了。但如果我们使用的是第三方库,在android 10他返回的就是以content开头的文件路径,我们只有自己处理了,处理方式如下

    public static Bitmap getBitmapFromPath(Context contex, String path) 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) 
            return getBitmapFromUri(contex, Uri.parse(path));
         else 
            return BitmapFactory.decodeFile(path);
        
    

    // 通过uri加载图片
    public static Bitmap getBitmapFromUri(Context context, Uri uri) 
        try 
            ParcelFileDescriptor parcelFileDescriptor =
                    context.getContentResolver().openFileDescriptor(uri, "r");
            FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
            Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
            parcelFileDescriptor.close();
            return image;
         catch (Exception e) 
            e.printStackTrace();
        
        return null;
    

以上算是工作中一个小小的记录吧


以上是关于android10获取相册失败的解决方式的主要内容,如果未能解决你的问题,请参考以下文章

android10获取相册图片

Android开发之获取相册照片和获取拍照照片

小程序怎么临时加载本地相册图片

Android获取本地相册图片拍照获取图片

android开发之——获取相册图片和路径

MASA MAUI Plugin Android相册多选照片(Intent 方式)