Android 告诉摄像机保存拍摄图像的意图
我正在这样做:Android 告诉摄像机保存拍摄图像的意图,android,android-intent,android-camera,mediastore,Android,Android Intent,Android Camera,Mediastore,我正在这样做: intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); final File storage = Environment.getExternalStorageDirectory(); final Uri uri = Uri.fromFile(new File(storage, System.currentTimeMillis() + ".jpg")); intent.putExtra(MediaStore.EXTRA_OUTPU
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
final File storage = Environment.getExternalStorageDirectory();
final Uri uri = Uri.fromFile(new File(storage, System.currentTimeMillis() + ".jpg"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, id);
为了得到那张照片,我做了以下工作:
private String getLastImagePath() {
final String[] imageColumns = { MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
final Cursor imageCursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns,
null, null, imageOrderBy);
if (imageCursor.moveToFirst()) {
final String fullPath = imageCursor.getString(imageCursor
.getColumnIndex(MediaStore.Images.Media.DATA));
return fullPath;
} else {
throw new RuntimeException();
}
}
然而,我不断收到这样的信息:
07-02 14:46:54.751: E/BitmapFactory(23119): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/IMG_20130702_144653.jpg: open failed: ENOENT (No such file or directory)
如果我查看图库,照片不在那里,因此我猜测其目的是忽略MediaStore.EXTRA_输出值
我能做些什么不需要编写自己的相机解决方案吗?像这样使用:
意图:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);
获取该结果:
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//file path of captured image
filePath = cursor.getString(columnIndex);
//file path of captured image
File f = new File(filePath);
filename= f.getName();
Toast.makeText(SiteViewFieldCreate.this, "Your Path:"+filePath, 2000).show();
Toast.makeText(SiteViewFieldCreate.this, "Your Filename:"+filename, 2000).show();
cursor.close();
//Convert file path into bitmap image using below line.
// yourSelectedImage = BitmapFactory.decodeFile(filePath);
//put bitmapimage in your imageview
//yourimgView.setImageBitmap(yourSelectedImage);
}
break;
}
}
将其添加到您的manifest.xml中
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
希望这能为您提供一些解决方案。Nirmals解决方案在除Android 4.x(Apilevel 15)之外的所有设备上都能正常工作。
似乎是个bug,但imageReturnedIntent.getData()
始终返回null!(在模拟器和设备上进行测试)
拍摄的照片甚至没有保存在externaldir上,因此从ContentResolver
获取最新id
或添加的最新日期的任何尝试都将失败(从卡返回最新照片,但不返回拍摄的照片)!
目前我还没有这个问题的解决方案…似乎不可能在Apilevel 15上获取拍摄照片的路径(虽然您仍然可以自己获取可绘制和保存)。您是否已将此权限放在menifest中?是否确实需要此权限?我的意思是,如果我在没有互联网许可的情况下使用应用程序的共享意图,我仍然可以在Twitter上共享它。要接收图像的结果。Nvm,没有看到它<代码>imageReturnedIntent.getData()代码>仍然返回null。请按照该代码进行操作。因为它对我有用。请参考这也可能对您有所帮助。签入设备。不要签入模拟器。我正在签入Nexus4。