【发布时间】: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) 以使这两个功能发挥作用:
- 将拍摄的照片显示到 ImageView
- 同时将照片保存到图库。
我不能同时让这两个工作。请帮忙。我试着把 onAcitivityResult 上的 putExtra 和 galleryAddPic 但它仍然 崩溃。没有 putExtra,galleryAddPic 将无法工作。
【问题讨论】:
-
我必须在 Android 4.4.2 Kitkat 上工作
标签: android camera gallery android-imageview