相机,相册

来源:6-5 头像上传于FileProvider3

丹阳_不落

2020-02-13

老师,我按照您视频里的代码写的拍照和从相册选择图片,但是在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);

    }
写回答

2回答

孃嬢头

2021-04-28

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

0
2
刘某人
回复
慕瓜7462784
第一,确认下有没有申请动态sdcard读写的权限,第二,由于高版本的内存分区限制,需要在清单文件的application根节点,加上android:requestLegacyExternalStorage="true"
2021-12-31
共2条回复

刘某人

2020-02-13

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

0
6
刘某人
回复
丹阳_不落
你这个错误是json解析的异常,你看下是不是哪一部分的网络请求结果进行了非法的GSON
2020-02-13
共6条回复

聚焦市场开发热门技术 手把手带你开发商业级社交App

从零打造一款跟随灵魂的高性能社交App

559 学习 · 194 问题

查看课程