action_image_captureの意図から画像のパスを取得します
-
10-10-2019 - |
質問
こんにちは私は使用しています ACTION_IMAGE_CAPTURE
使用を使用して画像をキャプチャするため Intent
次のように:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(
MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(),
String.valueOf(System.currentTimeMillis()) + ".jpg"))
);
startActivityForResult(cameraIntent, 0);
画像をsdcardに保存し、次のようにその画像のパスを取得する必要があります onActivityResult
方法。現在キャプチャされている画像の画像パスを取得する方法がわかりません。
誰かが知っていれば助けてください。
ありがとう
解決
これは、2.2で動作する方法です(以前のバージョンとは異なります)。意図を開始するとき
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
startActivityForResult(intent, CAPTURE_PICTURE_INTENT);
覚えておく必要があります mCapturedImageURI
.
画像をキャプチャするとき、 onActivityResult()
そのURIを使用してファイルパスを取得します。
String[] projection = { MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null);
int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String capturedImageFilePath = cursor.getString(column_index_data);
アップデート: 新しいAndroidデバイスでは、mediastore.extra_outputは必要ありませんが、むしろdata.getData()から画像/ビデオuriを推定します。
Android Action_image_capture Intent
ただし、この部分はメーカーの適応の対象となるため、「古い」アプローチが役立つ可能性がある電話に遭遇する可能性があります。
他のヒント
Android 2.1でテストされた別の方法は、ギャラリーの最後の画像のIDまたはAbsolutePathを取得することです。
それはそのように行うことができます:
/**
* 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;
}
}
ファイルを削除するには:
private void removeImage(int id) {
ContentResolver cr = getContentResolver();
cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) } );
}
このコードは投稿に基づいていました。 カメラの意図の写真を撮った後、ギャラリーの画像を削除します
この質問は非常に古いですが、私は半日と同じ問題と戦っています。問題はあなたのことです ACTION_IMAGE_CAPTURE
意図は常に戻ります code=-1
と data=null
あなたがあなたのアプリケーションの次の権限を設定しない限り AndroidManifest.xml
ファイル:
<uses-permission android:name="android.permission.CAMERA"/>
アプリケーションからオーディオを記録する場合は、次のことを設定することもできます。
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
削除する
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
そして追加します
Uri uri = data.getData();in onActivityResult