不明白为什么我没有得到我的照片?

时间:2017-01-25 09:57:37

标签: android android-studio android-intent

我正在制作一个演示应用程序,我正在拍照然后保存它。 我想在图像视图中显示图片。我不明白为什么它不起作用。我最近尝试了一些解决方案,但没有为我工作。 是否有人可以告诉我我的代码有什么问题。

//这是我的代码

    private Button takePictureButton;
        private ImageView imageView;
        private Uri file;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            takePictureButton = (Button) findViewById(R.id.button_image);
            imageView = (ImageView) findViewById(R.id.imageview);

            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                takePictureButton.setEnabled(false);
                ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE }, 0);

            }
        }

        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            if (requestCode == 0) {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED&&grantResults[2]==PackageManager.PERMISSION_GRANTED) {
                    takePictureButton.setEnabled(true);
                }
            }
        }

        public void takePicture(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            file = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

            startActivityForResult(intent, 100);
        }

        private static File getOutputMediaFile(){
            File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES), "CameraDemo");

            if (!mediaStorageDir.exists()){
                if (!mediaStorageDir.mkdirs()){
                    Log.d("CameraDemo", "failed to create directory");
                    return null;
                }
            }

            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            return new File(mediaStorageDir.getPath() + File.separator +
                        "IMG_"+ timeStamp + ".jpg");
        }

            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == 100) {
//Code that bind image with ImageView

                    if (resultCode == RESULT_OK) {
                        imageView.setMaxHeight(100);
                        imageView.setMaxWidth(100);
                        imageView.setImageURI(null);
                        imageView.setImageURI(file);
                    }
                }

//提前致谢

3 个答案:

答案 0 :(得分:0)

我真的不明白你在这做什么。但是:

    if (resultCode == RESULT_OK && data != null && data.getData() != null) {
                        Uri uri = data.getData();
                        imageView.setMaxHeight(100);
                        imageView.setMaxWidth(100);
                        imageView.setImageURI(uri);
    }

在您的activityResult上替换此代码,它对我有用。

答案 1 :(得分:0)

尝试这种方式它将起作用

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  if (resultCode == Activity.RESULT_OK) {
     if (requestCode == SELECT_FILE)
        onSelectFromGalleryResult(data);
     else if (requestCode == REQUEST_CAMERA)
        onCaptureImageResult(data);
  }
}
private void onCaptureImageResult(Intent data) {
  Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
  ByteArrayOutputStream bytes = new ByteArrayOutputStream();
  thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

  File destination = new File(Environment.getExternalStorageDirectory(),
        System.currentTimeMillis() + ".jpg");

  FileOutputStream fo;
  try {
     destination.createNewFile();
     fo = new FileOutputStream(destination);
     fo.write(bytes.toByteArray());
     fo.close();
  } catch (FileNotFoundException e) {
     e.printStackTrace();
  } catch (IOException e) {
     e.printStackTrace();
  }

  ivImage.setImageBitmap(thumbnail);
}

有关详情,请参阅此http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

答案 2 :(得分:0)

在我的情况下,它对我有用:

private static Bitmap Image = null;
private static Bitmap rotateImage = null;   



@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e("resultCode", Integer.toString(resultCode));
        Log.e("requestCode", Integer.toString(requestCode));
            Log.e("Inside If","Success");
            Uri mImageUri = data.getData();
            try {
                Image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageUri);
                if (getOrientation(getApplicationContext(), mImageUri) != 0) {
                    Matrix matrix = new Matrix();
                    matrix.postRotate(getOrientation(getApplicationContext(), mImageUri));
                    if (rotateImage != null)
                        rotateImage.recycle();
                    rotateImage = Bitmap.createBitmap(Image, 0, 0, Image.getWidth(), Image.getHeight(), matrix,true);
                    imageView.setImageBitmap(rotateImage);
                    //saveImagetoFolder(rotateImage);
                } else {
                    imageView.setImageBitmap(Image);
                   // saveImagetoFolder(Image);

                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

    }