我试图获取用手机拍摄的照片的URI。我试图将传递给“onActivityResult”的数据转换为URI,然后将此URI转换为字符串以存储在我的数据库中。此方法适用于视频,因此如何通过照片实现这一点?当我尝试将数据转换为URI时,出现空指针异常。我应该使用不同的功能将照片数据转换为URI吗?我的代码如下:Android-如何获取拍摄的照片的阴影
按钮意图启动录像机:
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);
}
嗨greenapps。我正在查找这个,并且遇到了putExtra EXTRA_OUTPUT。我相信这只是将照片的Uri添加到发送给onActivityResult的意图,这将解决问题。但是,我不知道如何添加putri的Uri,你会介意怎么做吗? –
只是谷歌的例子。这个网站上有数百个。否uri将不可用作onActivity结果的参数。你应该'记住'使用过的uri。 – greenapps
我有,但我仍然在努力将这些示例适用于我的代码。我不需要实际的文件来将Uri添加到意图中吗? –