2011-10-03 11 views
16

カメラの意図で写真を作成し、デフォルトのDCIMフォルダに保存したいとします。次に、画像が保存されているパス/ファイル名を取得したいと思います。カメラのインテント結果からパスとファイル名を取得する

私は次のコードでそれをしようとしています:このコードで

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, TAKE_PICTURE); 

、カメラが開き、私は1枚の画像を撮影した後に、それはデフォルトの画像フォルダ(通常は/ DCIM /に絵を閉じて保存しますカメラまたはSDカード/ dcim /カメラ...)

しかし、どのようにして撮影画像のパスとファイル名を得ることができますか? 私は

String result = data.getData(); 

String result = data.getDataString(); 

String result = data.toURI(); 

Uri uri = data.getData(); 

電子を試してみましたonActivityResult のほぼすべてのものを試してみましたtc。

これについての解決策を見つけるために私は最後の2日間を調査しましたが、ウェブ上や多数の記事がありますが、何も動作しません。 サムネイルは欲しくない、私はカメラが撮影した画像にのみパス(uri?)を付けたい。私がしようとすると :

は、任意のヘルプ

EDITありがとうござい

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(しかしそれは大丈夫です、私はイメージへのパスが必要です、それは名前が何であるかは関係ありません)。

敬具再び

EDIT

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でファイルパスを取得できますか?

+6

あなたをパスを知っている...ファイルを作成してから。ファイルまたはパスをアクティビティのメンバ変数として保持することができます。 –

答えて

1

ACTION_IMAGE_CAPTUREを起動するときに、MediaStore.EXTRA_OUTPUTを、画像を保存するファイルのURIとして渡すことができます。

は、ここで簡単な例です:

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()にしようとしたが私のために問題を解決しました。

+0

こんにちは、あなたのクイック返信をありがとう、それは期待どおりに動作しません。私は上記で説明します。 – bihcoder

+0

上記のコードで私は答えました。 – bihcoder

+0

愚かな質問かもしれません...あなたはマニフェストの許可を加えましたか? android.permission.CAMERA?はい、それは許可なしに何度か働くことができます –

6

画像はギャラリーのフォルダに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; 
    } 
} 

このサンプルはポストに基づいていた:

あなたがやって最後に撮影した画像を得ることができ出回っDeleting a gallery image after camera intent photo taken

+1

ねえ、このコードはsamsungタブで動作しますが、lenovoとi-ballタブでは機能しません。 – Shubham

1
あなたが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); 
     } 
    } 
関連する問題