首页 > Android 5.1利用系统相机拍照如何获取到图片?

Android 5.1利用系统相机拍照如何获取到图片?

以前写的换头像的功能用到相机,代码大致如下:

  1. 先调用相机去拍照:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUriFile);
startActivityForResult(intent, TAKE_PHOTO);
  1. 后裁剪:
private void cropPhoto(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        // 开启在intent中设置显示的View可裁剪
        intent.putExtra("crop", true);
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片的宽高
        intent.putExtra("outputX", AVATAR_SIZE);
        intent.putExtra("outputY", AVATAR_SIZE);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, CROP_PHOTO);
    }
  1. 然后再onactivityresult里获取:
    photo = data.getParcelableExtra("data");

但是photo获取出来为null,怎么破?
求帮助

先谢过


你好,你在拍照的时候传入了MediaStore.EXTRA_OUTPUT参数,这样就会导致在onActivityResult中的
data.getData("data")为null。
你可以不设置MediaStore.EXTRA_OUTPUT参数,能正常获取Uri uri = data.getData("data");
但是这个uri地址的图片是经过系统压缩的,应该不符合你的需求。
或者你可以设置mUriFile为全局变量,在cropPhoto方法中直接使用。
希望可以帮助到你 :)

private File mUriFile;
private static final int CAMERA_PIC = 1;
private static final int CROP_PIC = 2;

private void takePic() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    mUriFile = new File(Environment.getExternalStorageDirectory() + "/Download/" + System.currentTimeMillis());
    try {
        mUriFile.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mUriFile));
    startActivityForResult(intent, CAMERA_PIC);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case CAMERA_PIC:
            cropPhoto(Uri.fromFile(mUriFile));
            break;
        case CROP_PIC:
            //data.getParcelableExtra("data")
            Log.d(TAG, "error");
            break;
    }
}

private void cropPhoto(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 2);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", 200);
    intent.putExtra("outputY", 300);
    intent.putExtra("scale", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.putExtra("return-data", true);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", true);
    startActivityForResult(intent, CROP_PIC);
}
【热门文章】
【热门文章】