Android 显示从相机拍摄的图像时,Uri为空
嗨,我需要从相机拍摄一张照片,并显示在屏幕上 但我得到的Uri为null 我需要获取文件的绝对路径 我的代码:Android 显示从相机拍摄的图像时,Uri为空,android,android-camera,android-image,android-bitmap,Android,Android Camera,Android Image,Android Bitmap,嗨,我需要从相机拍摄一张照片,并显示在屏幕上 但我得到的Uri为null 我需要获取文件的绝对路径 我的代码: mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); mintent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString()); startActi
mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mintent.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
startActivityForResult(mintent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((data != null && !data.toString().equalsIgnoreCase("Intent { }"))
|| requestCode == 1)
switch (requestCode) {
case 1:
try {
Uri imageFileUri = data.getData();
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
img2.setImageBitmap(bitmap);
}
}
请帮助..这是我用来获取图片Uri的代码
private Bitmap photo;
private File pic;
private Uri uri;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
photo = (Bitmap) data.getExtras().get("data");
try {
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()) {
pic = new File(root, "pic.png");
FileOutputStream out = new FileOutputStream(pic);
photo.compress(CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
} catch (IOException e) {
Log.e("BROKEN", "Could not write file " + e.getMessage());
}
// This is the uri you are looking for.
uri = Uri.fromFile(pic);
}
}
注:别忘了接受你在上一个问题中提出的答案:如果你不想名誉扫地。你的问题是:
mintent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mintent.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
您没有传递希望文件驻留的URI。而是传递文件夹的URI。相反,您应该将URI传递到希望文件的位置。下面是我几个月前做的一个项目的一个例子:
File lastSavedFile;
/**
* IMPORTANT: this must be a directory readable by multiple apps (not private storage)
* @return
*/
@SuppressLint("SimpleDateFormat")
private File getTempFile() {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "barfile_" + timeStamp + ".jpg";
return new File(Environment.getExternalStorageDirectory(), imageFileName);
}
/**
* Called when we want to take a picture
*
* @param position
*/
private void launchTakePictureIntent(int position)
{
Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
lastSavedFile = getTempFile();
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(lastSavedFile));
startActivityForResult(i, position);
}
/**
* Returns from the camera intent, hopefully with a picture
*/
@Override
protected void onActivityResult(int position, int resultCode, Intent intent) {
super.onActivityResult(position, resultCode, intent);
if (resultCode == RESULT_OK) {
Uri imageUri = Uri.fromFile(lastSavedFile);
Bitmap fullBitmap;
try {
fullBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
} catch (Exception e) {
Log.e(TAG, e.toString(), e);
return;
}
...