Android 我能';不要用安卓相机拍摄高质量的照片

Android 我能';不要用安卓相机拍摄高质量的照片,android,camera,Android,Camera,我通过低质量或有时中等质量的相机拍照,相机返回正确的uri并将照片发送到我的应用程序 当我在三星手机和HTC手机中设置高质量相机时,会出现错误nullpointerexception:uri(或在其他手机中使我的应用程序崩溃),但在低质量手机中效果很好 我的代码: imCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ContentValue

我通过低质量或有时中等质量的相机拍照,相机返回正确的
uri
并将照片发送到我的应用程序

当我在三星手机和HTC手机中设置高质量相机时,会出现错误
nullpointerexception:uri
(或在其他手机中使我的应用程序崩溃),但在低质量手机中效果很好

我的代码:

imCamera.setOnClickListener(new
View.OnClickListener() {
  @Override
  public void onClick(View v) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, "New Picture");
    values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera");
    imageUri = getContentResolver().insert(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);    

    if (intent.resolveActivity(getPackageManager()) != null) {
      startActivityForResult(intent, 100);
    }
    show.dismiss();
  }
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  ...

  try {
    Bitmap thumbnail = MediaStore.Images.Media.getBitmap(
    getContentResolver(), imageUri);

    String photoPath = getRealPathFromURI(imageUri);
    ExifInterface ei = new ExifInterface(photoPath);
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
    ExifInterface.ORIENTATION_UNDEFINED);

    Bitmap rotatedBitmap = null;
    switch (orientation) {

      case ExifInterface.ORIENTATION_ROTATE_90:
      rotatedBitmap = rotateImage(thumbnail, 90);
      break;

      case ExifInterface.ORIENTATION_ROTATE_180:
      rotatedBitmap = rotateImage(thumbnail, 180);
      break;

      case ExifInterface.ORIENTATION_ROTATE_270:
      rotatedBitmap = rotateImage(thumbnail, 270);
      break;

      case ExifInterface.ORIENTATION_NORMAL:
      default:
      rotatedBitmap = thumbnail;
    }


    if (rotatedBitmap != null) {
      ivImage.setImageBitmap(rotatedBitmap);

      File tempFile = GetTempFile(rotatedBitmap);

      if (tempFile != null)
      crImage = tempFile;
    }

  } catch (Exception e) {
    e.printStackTrace();
  }
更新: 我在android上测试了它:4,5,6,7
但当质量很高时,它仍然给我错误

更新
可能是因为我在主线程中执行此操作?

如何选择高质量?通常,相机应用程序仅使用默认尺寸进行拍摄。