Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)

所属分类: 软件编程 / Android 阅读数: 31
收藏 0 赞 0 分享

Feature: 点击选择拍照或者打开相册,选取图片进行裁剪最后设置为圆形头像。

Problem: 拍好照片,点击裁剪,弹Toast“无法加载此图片”。

Solution: 在裁剪的class里加两行代码

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

主要代码如下:

   

 public static final String PHOTO_IMAGE_FILE_NAME = "fileImg.jpg";
  public static final int CAMERA_REQUEST_CODE = 100;
  public static final int IMAGE_REQUEST_CODE = 101;
  public static final int RESULT_REQUEST_CODE = 102;
  private File tempFile = null;
  private Uri imageUri;
  //跳转相机
  private void toCamera() {
    File outputImage = new File(getActivity().getExternalCacheDir(),
        PHOTO_IMAGE_FILE_NAME);
    try {
      if (outputImage.exists()) {
        outputImage.delete();
      }
      outputImage.createNewFile();
    } catch (IOException e) {
      e.printStackTrace();
    }
    if (Build.VERSION.SDK_INT >= 24) {
      imageUri = FileProvider.getUriForFile(getActivity(),
          "com.liushengjie.smartbutler.fileprovider", outputImage);
    } else {
      imageUri = Uri.fromFile(outputImage);
    }
    //启动相机程序
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, CAMERA_REQUEST_CODE);
    dialog.dismiss();
  }
  //跳转相册
  private void toPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, IMAGE_REQUEST_CODE);
    dialog.dismiss();
  }
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != getActivity().RESULT_CANCELED) {
      switch (requestCode) {
        //相机数据
        case CAMERA_REQUEST_CODE:
          //tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_IMAGE_FILE_NAME);
          //startPhotoZoom(Uri.fromFile(tempFile));
          startPhotoZoom(imageUri);
          break;
        //相册数据
        case IMAGE_REQUEST_CODE:
          startPhotoZoom(data.getData());
          break;
        case RESULT_REQUEST_CODE:
          //有可能点击舍弃
          if (data != null) {
            //拿到图片设置
            setImageToView(data);
            //删除原来的图片
            if (tempFile != null) {
              tempFile.delete();
            }
          }
          break;
      }
    }
  }
  //裁剪
  private void startPhotoZoom(Uri uri) {
    if (uri == null) {
      L.e("uri == null");
      return;
    }
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    //裁剪
    intent.putExtra("crop", true);
    //宽高比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    //图片质量
    intent.putExtra("outputX", 320);
    intent.putExtra("outputY", 320);
    //发送数据
    intent.putExtra("return-data", true);
    startActivityForResult(intent, RESULT_REQUEST_CODE);
  }
  //设置图片
  private void setImageToView(Intent data) {
    Bundle bundle = data.getExtras();
    if (bundle != null) {
      Bitmap bitmap = bundle.getParcelable("data");
      profile_image.setImageBitmap(bitmap);
    }
  }

以上所述是小编给大家介绍的Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0) ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多