【问题标题】:Android : Use Camera to display image to ImageView and Save to GalleryAndroid:使用相机将图像显示到 ImageView 并保存到图库
【发布时间】:2015-07-11 07:01:39
【问题描述】:

我正在制作一个应用程序,它可以选择从相机或图库中获取图像并将其显示在 ImageView 中。 我从Android Developers Tutorial. 得到这个 我正在为此使用 DialogInterface:

private void selectImage() {
        final CharSequence[] items = { "Take Photo", "Choose from Library",
                "Cancel" };

        AlertDialog.Builder builder = new AlertDialog.Builder(ReportIncident.this);
        builder.setTitle("Add Picture");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int item) {
                if (items[item].equals("Take Photo")) {
                    takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    // Ensure that there's a camera activity to handle the intent

                    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                        // Create the File where the photo should go

                        try {
                            photoFile = createImageFile();
                            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));

                            startActivityForResult(takePictureIntent, 0);


                        } catch (IOException ex) {
                            // Error occurred while creating the File
                            ex.printStackTrace();
                        }

                    }
                } else if (items[item].equals("Choose from Library")) {
                    Intent intent = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/*");
                    startActivityForResult(
                            Intent.createChooser(intent, "Select File"), 1);
                } else if (items[item].equals("Cancel")) {
                    dialog.dismiss();
                }
            }
        });
        builder.show();
    }

createImageFile 创建将保存照片的目录/文件:

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "FIREFLOOD_" + timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = "file:" + image.getAbsolutePath();
    return image;
}

“从库中选择”部分已经在工作,但“拍照”部分有问题。具体在这一行:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
galleryAddPic();
startActivityForResult(takePictureIntent, 0);

在 startActivityOnResult() 之前有 putExtra() 和 galleryAddPic() 拍照后应用程序崩溃但成功将图像保存到 画廊。但是从代码中删除这两种方法会显示拍摄的照片 到 ImageView 报告图像。

startActivityForResult 显示通过activityOnResult拍摄到ImageView的图片:

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

        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == 1) {

                onSelectFromGalleryResult(data);
            }else if (requestCode == 0) {
                Bundle extras = data.getExtras();
                Bitmap imageBitmap = (Bitmap) extras.get("data");
                reportImage.setImageBitmap(imageBitmap);




            }
        }
    }

将图片保存到图库由galleryAddPic执行:

private void galleryAddPic() {

        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(mCurrentPhotoPath);
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
    }

问题是我可以将这两种方法放在哪里(putExtra 和 galleryAddPic) 以使这两个功能发挥作用:

  1. 将拍摄的照片显示到 ImageView
  2. 同时将照片保存到图库。

我不能同时让这两个工作。请帮忙。我试着把 onAcitivityResult 上的 putExtra 和 galleryAddPic 但它仍然 崩溃。没有 putExtra,galleryAddPic 将无法工作。

【问题讨论】:

  • 我必须在 Android 4.4.2 Kitkat 上工作

标签: android camera gallery android-imageview


【解决方案1】:

【讨论】:

  • 它为我工作我也使用相同的代码和相同的设备 kitkat 4.4.4 它对我来说工作正常
  • 谢谢!我发现每次调用 startResultforActivity 时都会出现 NullPointerException。我重写了两种方法:onSavedInstanceState 和 onRestoreInstanceState 来恢复 fileuri 并使用它将图像显示到 imageview..
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 2015-02-16
  • 2013-02-28
  • 1970-01-01
  • 2017-09-28
  • 2021-04-27
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多