24

こんにちは、次のように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);

onActivityResultイメージを SD カードに保存し、メソッドを使用してそのイメージのパスを取得する必要があります。現在キャプチャされている画像の画像パスを取得する方法がわかりません。

誰かが知っているなら、助けてください。

ありがとう

4

4 に答える 4

50

これが 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 は必要ありませんが、onActivityResult(..., Intent data) から受け取った data.getData() から画像/動画の URI を推測します。

Android ACTION_IMAGE_CAPTURE インテント

ただし、この部分はメーカーの適応の対象となるため、「古い」アプローチが役立つ可能性がある電話機にまだ遭遇する可能性があります.

于 2010-11-15T14:53:29.590 に答える
7

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) } );
}

このコードは、次の投稿に基づいています:カメラの意図による写真撮影後にギャラリー画像を削除する

于 2012-01-30T16:30:23.440 に答える
2

この質問は非常に古いですが、私は半日同じ問題と戦っています。問題は、ファイルでアプリケーションに次のアクセス許可を設定しない限り、ACTION_IMAGE_CAPTUREインテントが常に返されることです。code=-1data=nullAndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA"/>

アプリケーションからオーディオを録音する場合は、次のように設定することもできます。

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
于 2012-04-25T09:32:53.887 に答える