携帯電話で撮影した写真のURIを取得しようとしています。私は "onActivityResult"に渡されたデータをURIに変換しようとしています。そして、このURIをデータベースに格納する文字列に変換します。この方法は動画でも機能しますので、どのように写真でこれを実現できますか?データをURIに変換しようとすると、NULLポインタ例外が発生します。別の機能を使用して写真データをURIに変換する必要がありますか?Android - 撮影した写真のURLを取得する方法
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.
}
}
UPDATED写真のキャプチャを開始する
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);
}
});
ボタンの意図:
ボタンの目的は、ビデオレコーダーを起動するために次のように私のコードです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);
}
Hi greenapps。私はこれを見て、putExtra EXTRA_OUTPUTを見つけました。私はこれがonActivityResultに送られた意図に写真のUriを加えるだけで、問題を解決すると信じています。しかし、putExtraを使ってUriを追加する方法はわかりません。どうやってそれを行うのか気になりますか? –
例のためだけにgoogle。このサイトには何百人もあります。 uriはonActivityの結果のパラメータとして利用できません。あなたは、使用されたURIを '覚え'なければなりません。 – greenapps
私は持っていますが、私はまだこれらの例を自分のコードに適応させるのに苦労しています。 Uriをインテントに追加するために実際のファイルは必要ありませんか? –