获取相机拍摄的照片

时间:2014-02-22 13:57:23

标签: android android-camera-intent

当用户使用相机拍照时,我希望图像显示在ImageView中,我想将Uri保存到在线数据库中。我听说保存图片的Uri比保存路径更好。

所以这就是我启动相机的方式:

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getFile(getActivity()))); 
String a = String.valueOf(Uri.fromFile(getFile(getActivity())));
intent.putExtra("photo_uri", a);
startActivityForResult(intent, PICK_FROM_CAMERA);

,其中

private File getFile(Context context){
  File sdCard = Environment.getExternalStorageDirectory();
  File directory = new File (sdCard.getAbsolutePath() + "/Myapp");
  if (!directory.exists()) {
       directory.mkdirs();
  }
  String filename = "bl" + System.currentTimeMillis() + ".jpg";
  File newFile = new File(directory, filename);

  return newFile;
}

在onActivityResult中:

Bundle extras = data.getExtras();
String photo_uri = extras.getString("photo_uri"); //null

这始终为空。在发送意图之前,Uri看起来像file:// ...而不是content://当我从图库中打开图像时,这是uri。我不知道这是不是一个问题。

另外,我应该将路径而不是Uri保存到数据库吗?我读到Uri在某些手机或Android版本中会很复杂。当我让用户从库中选择一个图像时,我将Uri保存到数据库中,所以我认为最好的方法是在这种情况下保存Uri。

我尝试了很多变化,但每当我尝试传递一个带有意图的变量时,我就会变为空。

1 个答案:

答案 0 :(得分:4)

启动意图后:

Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intentPicture,PICK_FROM_CAMERA); 

onActivityResult

case PICK_FROM_CAMERA:

   Uri selectedImageUri = data.getData();
   InputStream imageStream = null;
   try {
       imageStream = getContentResolver().openInputStream(selectedImageUri);
   } catch (FileNotFoundException e) {
       e.printStackTrace();
   }
   Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);   
break;

这就是全部。