Android 调用系统相册,针对6.0以上 崩溃 解决办法

来源:互联网 发布:b超图片上的数据 编辑:程序博客网 时间:2024/05/19 20:43

Android6.0 是一个分界线

6.0之后调用 系统相册 data会返回 null

首先,打开系统照相机

Intent intent = new Intent(Intent.ACTION_PICK);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERYstartActivityForResult(intent, PHOTO_REQUEST_GALLERY);


其次

protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == PHOTO_REQUEST_GALLERY) {        // 从相册返回的数据        if (data != null) {            // 得到图片的全路径            Uri uri = data.getData();            //裁剪            crop(uri);        }    } else if (requestCode == PHOTO_REQUEST_CAREMA) {        // 从相机返回的数据        if (hasSdcard()) {            crop(Uri.fromFile(tempFile));        } else {            Toast.makeText(MyInfoActivity.this, "未找到存储卡,无法存储照片!", Toast.LENGTH_SHORT).show();        }    } else if (requestCode == PHOTO_REQUEST_CUT) {        // 从剪切图片返回的数据        if (data != null) {            Uri mImageCaptureUri = data.getData();            Bitmap photoBmp = null;            if (mImageCaptureUri != null) {                try {                    photoBmp = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageCaptureUri);                    //保存                    SharedPreferences share = getSharedPreferences("PHOTO_REQUEST_CUT", MODE_PRIVATE);//实例化                    SharedPreferences.Editor editor = share.edit(); //使处于可编辑状态                    editor.putString("fileName", data.getData().toString());                    editor.commit();    //提交数据保存                    changeBitmap(photoBmp, PHOTO_REQUEST_CUT, photoBmp + ".jpg");                    iv_head_image.setImageBitmap(photoBmp);                } catch (IOException e) {                    e.printStackTrace();                }            }        }        try {            // 将临时文件删除            tempFile.delete();        } catch (Exception e) {            e.printStackTrace();        }    }    super.onActivityResult(requestCode, resultCode, data);}

我这里 针对 图像做裁剪 处理 了 ,也放上 代码


  /*    * 剪切图片    */    private void crop(Uri uri) {        // 裁剪图片意图        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(uri, "image");        intent.putExtra("crop", "true");        // 裁剪框的比例,1:1        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // 裁剪后输出图片的尺寸大小        intent.putExtra("outputX", 250);        intent.putExtra("outputY", 250);        intent.putExtra("outputFormat", "JPEG");// 图片格式        intent.putExtra("noFaceDetection", true);// 取消人脸识别        intent.putExtra("return-data", false);        intent.putExtra(MediaStore.EXTRA_OUTPUT, 0);//         开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT        startActivityForResult(intent, PHOTO_REQUEST_CUT);    }

这个时候   data 就不为 空了……

阅读全文
0 0
原创粉丝点击