我正在尝试使用手机拍摄照片的URI。我试图将传递给“onActivityResult”的数据转换为URI,然后将此URI转换为存储在我的数据库中的字符串。此方法适用于视频,那么如何通过照片实现这一目标?当我尝试将数据转换为URI时,我得到一个空指针异常。我应该使用不同的功能将照片数据转换为URI吗?我的代码如下:
启动录像机的按钮意图:
recordVideoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startVideoFunction = new Intent();
startVideoFunction.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(startVideoFunction, REQUEST_CODE_VIDEO);
}
});
开始拍照的按钮意图:
takePhotosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startPhotoFunction = new Intent();
startPhotoFunction.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(startPhotoFunction, REQUEST_CODE_PHOTO);
}
});
onActivityResult方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
switch (requestCode) {
case REQUEST_CODE_VIDEO:
videoUri = data.getData();
String videoPath = videoUri.toString();
videoDB.addVideoRow(videoPath);
//displayVideo.setVideoURI(videoUri);
//displayVideo.start();
break;
case REQUEST_CODE_PHOTO:
photoUri = data.getData();
String photoPath = photoUri.toString();
videoDB.addPhotoRow(photoPath);
break;
}
}catch (NullPointerException e){
//prevent crash when returning with Null data to mainactivity.
}
}
更新onActivityResult :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
// try {
switch (requestCode) {
case REQUEST_CODE_VIDEO:
videoUri = data.getData();
String videoPath = videoUri.toString();
videoDB.addVideoRow(videoPath);
//displayVideo.setVideoURI(videoUri);
//displayVideo.start();
break;
case REQUEST_CODE_PHOTO:
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri tempUri = getImageUri(getApplicationContext(), photo);
File finalFile = new File(getRealPathFromURI(tempUri));
String photoPath = finalFile.toString();
videoDB.addPhotoRow(photoPath);
break;
}
//}catch (NullPointerException e){
//prevent crash when returning with Null data to mainactivity.
//}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
答案 0 :(得分:0)
从Image获取Uri:使用下面提到的代码将位图转换为Uri。您始终可以将位图压缩格式更改为PNG,但随后避免使用.compress行,因为它没用。 PNG不会被压缩。
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); // Used for compression rate of the Image : 100 means no compression
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "xyz", null);
return Uri.parse(path);
}
要从Uri获取Absolute Path,请使用此方法
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int id_uri = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(id_uri);
}
希望这能解决你的问题。
答案 1 :(得分:0)
你走错了路。现在,您只保存所拍摄图像的缩略图并将其保存到文件中。虽然原始完整图像已经存在于文件系统的文件中。
告诉相机应用程序,意图存储要拍摄的图像。使用putExtra for EXTRA_OUTPUT。