请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

相机,相册

老师,我按照您视频里的代码写的拍照和从相册选择图片,但是在onActivityResult函数中,拍照的话拿到的resultCode是0,图片显示不出来;相册选择图片的话resultCode是-1,但是选出的图片显示到ImageView上是纯白的

用的是模拟器(Pixel 2XL API 29)

下图是从相册选择完图片返回的显示:
图片描述

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        LogUtils.i("resultCode:" + resultCode);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == FileHelper.CAMERA_CODE) {
               uploadFile = FileHelper.getInstance().getTempFile();
            } else if (requestCode == FileHelper.ALBUM_CODE) {
                Uri uri = data.getData();
                if (uri != null) {
                    String path = FileHelper.getInstance().getRealPathFromUri(this, uri);
                    if (!TextUtils.isEmpty(path)) {
                        uploadFile = new File(path);

                    }
                }
            }
            //设置头像
            if (uploadFile != null) {
                Bitmap mBitmap = BitmapFactory.decodeFile(uploadFile.getPath());
                iv_photo.setImageBitmap(mBitmap);


            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
public void toCamera(Activity mActivity){
        try {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            String fileName = simpleDateFormat.format(new Date());
            tempFile = new File(Environment.getExternalStorageDirectory(), fileName + ".jpg");
            //兼容Android N
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                imageUri = Uri.fromFile(tempFile);
            } else {
                //利用FileProvider
                imageUri = FileProvider.getUriForFile(mActivity,
                        mActivity.getPackageName() + ".fileprovider", tempFile);
                //添加权限
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }
            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            mActivity.startActivityForResult(intent, CAMERA_CODE);
        } catch (Exception e) {
            Toast.makeText(mActivity, "无法打开相机", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }

    public void toAlbum(Activity activity){
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        activity.startActivityForResult(intent, ALBUM_CODE);

    }

正在回答 回答被采纳积分+3

2回答

孃嬢头 2021-04-28 15:30:52

我也是,真机演示,相机返回的resultCode是0,相册返回的是-1,但是相册上传后,显示为纯白。

0 回复 有任何疑惑可以回复我~
  • 解决了吗
    回复 有任何疑惑可以回复我~ 2021-06-08 01:44:12
  • 第一,确认下有没有申请动态sdcard读写的权限,第二,由于高版本的内存分区限制,需要在清单文件的application根节点,加上android:requestLegacyExternalStorage="true"
    回复 有任何疑惑可以回复我~ 2021-12-31 20:49:52
刘某人 2020-02-13 15:34:17

-1 是RESULT_OK 你先把获取到的path打印出来,看是否拿到地址了

0 回复 有任何疑惑可以回复我~
  • 提问者 丹阳_不落 #1
    相机的path:/storage/emulated/0/2020_02_13_08_15_17.jpg
    相册的path:/storage/emulated/0/DCIM/Camera/IMG_20200213_053657.jpg
    回复 有任何疑惑可以回复我~ 2020-02-13 16:17:29
  • 刘某人 回复 提问者 丹阳_不落 #2
    那说明有图片获取到了。您检查一下设置图片的方法。
    回复 有任何疑惑可以回复我~ 2020-02-13 17:22:03
  • 提问者 丹阳_不落 回复 刘某人 #3
    模拟器的相机好像就是不行,试了好多遍了。我刚试了真机(安卓9)可以,然后试了安卓5的真机,拍照返回之后显示的是一张纯黑的图片,然后app变得很卡,然后就会重启,这是为什么啊
    回复 有任何疑惑可以回复我~ 2020-02-13 18:39:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信