从android中的相机意图获取uri

点击

takePic.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageUri = getImageUri(); m_intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(m_intent, REQUEST_IMAGE_CAPTURE); } }); 

结果:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Log.d("test1",""+imageUri); Intent shareIntent = new Intent(this, SharePicForm.class); shareIntent.putExtra("photo",""+imageUri); startActivity(shareIntent); } } 

getImageUri()

 private Uri getImageUri(){ Uri m_imgUri = null; File m_file; try { SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); m_curentDateandTime = m_sdf.format(new Date()); m_imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + m_curentDateandTime + ".jpg"; m_file = new File(m_imagePath); m_imgUri = Uri.fromFile(m_file); } catch (Exception p_e) { } return m_imgUri; } 

我想要实现的是非常简单,调用相机意图并获得结果照片的uri。 但似乎不同的设备不一致,在我的设备上它根本不起作用。 我试图将路径存储在公共variables上,但是当我检索它时,它是null,是否有正式和标准的方法来实现它,应该在所有设备上工作? 此外,有没有办法不提供自定义路径,但从相机意图获取默认的uri路径?

谢谢你的帮助

如果您的设备不尊重cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, ,您仍然可以使用

 Uri imageUri = data.getData(); 

onActivityResult(int requestCode, int resultCode, Intent data) 。 但在大多数情况下,问题是RAM是有限的,并且系统会破坏您的活动,为相机应用程序提供足够的内存以实现您的意图。 因此,当返回结果时,您的活动字段不会被初始化,您应该遵循Amit的建议并实现onSavedInstance()onRestoreInstanceState()

首先确保您的目录已创建……

 final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ "/Folder/"; File newdir = new File(dir); newdir.mkdirs(); 

在按钮上单击调用此function。

 private void capturarFoto() { String file = dir+DateFormat.format("yyyy-MM-dd_hhmmss", new Date()).toString()+".jpg"; File newfile = new File(file); try { newfile.createNewFile(); } catch (IOException e) {} Uri outputFileUri = Uri.fromFile(newfile); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { Log.d("Demo Pic", "Picture is saved"); } } 

确保您在清单中添加权限

   

只需使用这个Uri imageUri = data.getData();