android 10 BitmapFactory.decodeFile(ImageFilePath) 返回 null [英] android 10 BitmapFactory.decodeFile(ImageFilePath) return null

查看:48
本文介绍了android 10 BitmapFactory.decodeFile(ImageFilePath) 返回 null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个 android 应用程序,它允许用户从相机或从图库中选择图像,然后在 Imageview 中显示图像.如果用户从相机拍摄照片,我的应用程序工作正常,但如果用户从中选择图像我的应用程序仅适用于 android 9 及以下版本,BitmapFactory.decodeFile(ImageFilePath) 在 android 10 上始终返回 null,imageFilePath = "/storage/emulated/0/DCIM/Camera/20200629_114552.jpg"(路径相同安卓 9 和 10).我在打开图库之前请求读取外部存储权限,然后从 onActivityResult 获取图像路径,如下所示:

I'm building an android application which allow user to pick Image from camera or From Gallery then display the image in a Imageview.My application working fine if the user take the picture from camera, but if the user pick the image from gallery my application only work on android 9 and bellow,BitmapFactory.decodeFile(ImageFilePath) always return null on android 10 with the imageFilePath = "/storage/emulated/0/DCIM/Camera/20200629_114552.jpg"(path is the same on android 9 and 10). I've requested for read external storage permission before open gallery and then get the image path from onActivityResult like bellow:

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            case GALLERY_REQUEST_CODE:
                Uri selectedImage = data.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getActivity().getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String imgDecodableString = cursor.getString(columnIndex);
                cursor.close();
                if (!mNextImg) {
                    mBiomatrics_left_identity_img
                            .setImageBitmap(BitmapFactory.decodeFile(imgDecodableString));
                } else {
                    mBiomatrics_right_identity_img
                            .setImageBitmap(BitmapFactory.decodeFile(imgDecodableString));
                }
                mNextImg = !mNextImg;
                if (mBiomatrics_left_identity_img.getDrawable() != null
                        && mBiomatrics_right_identity_img.getDrawable() != null) {
                    mBiomatrics_btn_confirm.setTextColor(getResources()
                            .getColor(R.color.mainTextColor));
                } else {
                    mBiomatrics_btn_confirm.setTextColor(getResources()
                            .getColor(R.color.biometrics_btn_confirm_deactive_color));
                }
                break;
        }
    }
}



    

推荐答案

InputStream is = getContentResolver().openInputStream(data.getData());

Bitmap bitmap = BitmapFactory.decodeStream(is);

将此用于所有 Android 版本.

Use this for all Android versions.

停止尝试获取 uri 的路径.

Stop with trying to get a path for an uri.

这篇关于android 10 BitmapFactory.decodeFile(ImageFilePath) 返回 null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆