カメラインテントで写真を作成し、デフォルトのDCIMフォルダーに保存したいと思います。次に、画像が保存されているパス/ファイル名を取得します。
私は次のコードでそれを試しています:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);
このコードを使用すると、カメラが開き、1枚の写真を撮った後、カメラを閉じて、デフォルトの画像フォルダー(通常は/ dcim/cameraまたはsdcard/dcim/camera ...)に保存します。
しかし、どうすれば撮影した写真のパスとファイル名を取得できますか? onActivityResult
でほとんどすべてを試しました
String result = data.getData();
そして
String result = data.getDataString();
そして
String result = data.toURI();
そして
Uri uri = data.getData();
等.
私はこれに対する解決策を見つけるために過去2日間を調査しました。ウェブ上やスタックオーバーフローに関する記事はたくさんありますが、何も機能しません。サムネイルは必要ありません。カメラが撮影した画像へのパス(uri?)のみが必要です。
助けてくれてありがとう
編集:私が試みるとき:
path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
画像はtest.jpgとして保存されませんが、通常の画像名2011-10-03 ..... jpgで保存されます(ただし、これも問題ありません。画像へのパスのみが必要です。名前は関係ありません。です)。
宜しくお願いします
再度編集
path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
これを試してみると、画像が適切なフォルダに指定された名前(test111111.jpgなど)で保存されます。しかし、onActivityResultでファイルパスを取得するにはどうすればよいですか?
画像は2回保存されます。最初はギャラリーフォルダーに保存され、その後、putExtra(MediaStore.EXTRA_OUTPUT、path)メソッドで指定したファイルに保存されます。
あなたはそれをして撮られた最後の写真を得ることができます:
/**
* Gets the last image id from the media store
* @return
*/
private int getLastImageId(){
final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
if(imageCursor.moveToFirst()){
int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
Log.d(TAG, "getLastImageId::id " + id);
Log.d(TAG, "getLastImageId::path " + fullPath);
imageCursor.close();
return id;
}else{
return 0;
}
}
このサンプルは投稿に基づいています: カメラインテント写真を撮影した後にギャラリー画像を削除する
onActivityResult()でこのように使用できます
if(requestCode==CAMERA_CAPTURE)
{
Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToFirst())
{
do
{
String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
Uri selectedImage = Uri.parse(picturePath);
}
while(cursor.moveToNext());
cursor.close();
File out = new File(picturePath);
try
{
mOriginal = decodeFile(out);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mSelected.setImageBitmap(mOriginal);
}
}
_ACTION_IMAGE_CAPTURE
_を開始するときに、画像を保存するファイルのURI
として追加の _MediaStore.EXTRA_OUTPUT
_ を渡すことができます。
簡単な例を次に示します。
_ File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
_
編集: デバイスを試してみたところ、file.createNewFile()
で問題が解決しました。