相机拍摄的图像未保存

时间:2017-10-29 18:20:40

标签: android android-camera-intent

我对Android开发很新,我试图创建一个通过单击一个按钮调用相机的隐含意图的应用程序。捕获图像后,您可以单击后退按钮进入主要活动。在主要活动中有第二个按钮,当您点击它时,您可以看到最近的文件,捕获的图像应该显示在那里

我正在完成https://developer.android.com/training/camera/photobasics.html#TaskScalePhoto

使用以下代码捕获图像

final TextView textviewcamera =(TextView)findViewById(R.id.TextView1);         final int REQUEST_IMAGE_CAPTURE = 1;

    // Set an OnClickListener on this Text View
    // Called each time the user clicks the Text View
    textviewcamera.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
        /*
            opens the camera app and we are able to take a photo, photo is not save anywhere, needs to be fixed
            code is from android studio, DON'T FORGET to cite
            https://developer.android.com/training/camera/photobasics.html

         */
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //if (takePictureIntent.resolveActivity(getPackageManager()) != null)
            //{
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            //}

        }

然后我有另一段代码显示最近的文件

final TextView textviewpicture =(TextView)findViewById(R.id.TextView2);

    // Set an OnClickListener on this Text View
    // Called each time the user clicks the Text View
    textviewpicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        /*
            opens the camera app and we are able to take a photo, photo is not save anywhere, needs to be fixed
            code is from android studio, DON'T FORGET to cite
            https://developer.android.com/training/camera/photobasics.html

         */
            Intent viewpicture = new Intent();
            viewpicture.setType("image/*");
            viewpicture.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(viewpicture, "Select Picture"), 10);
        }
    });

我可以打开相机并拍照,但是当我尝试在最近的文件中查看时,这部分无效。

任何帮助都将受到高度赞赏

感谢所有人:)

1 个答案:

答案 0 :(得分:0)

覆盖您的onActivityresult,您可以从那里预览图像,将其保存到外部存储

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
case REQUEST_IMAGE_CAPTURE:
            if (resultCode != RESULT_CANCELED)
            {
            if (resultCode == RESULT_OK) {

                BitmapFactory.Options options = new 
                BitmapFactory.Options();
                options.inSampleSize = 8;
        Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                options);
           saveImageToExternalStorage(bitmap)
            }
    } else{
     //show error message 
    } 
  } }

public static File saveImageToExternalStorage(Bitmap finalBitmap) {
    File file;
    String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
    File myDir = new File(root + "/easyGovs");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-" + n + ".png";
    file = new File(myDir, fname);
    if (file.exists())
        file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.PNG, 55, out);
        out.flush();
        out.close();
        return file;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return file;
}

在传递相机使用意图的同时 -

     private Uri fileUri;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);