2011-01-18 13 views
3

誰かが何らかのポインタ(または正しい答え)を返すことを願っています。 シンプルなアプリで、内蔵のカメラアプリを使用して画像を撮影し、別のアプリケーションに保存します。終わり。Android Camera Intentの惨事

問題:カメラアプリケーションは、カスタムアプリケーションパス(/ mnt/sdcard/external_sd/DCIM/Camera)と私のカスタムパス(以下のコード)にイメージを保存します。 両方のファイルは、ファイル名を除いてまったく同じです。 external_sdファイル(消えたいファイル)はダッシュ( - )で保存され、カスタムファイルパスはアンダースコアで保存されます。ファイルサイズはまったく同じです。

どのようにしてこの2枚の画像の問題を解決できますか? 追加のインテントオプションがありますか? または、これを完全に間違って実行していますか、何か不足していますか? 私はGalaxy S Vibrantを使用しています。

コードスニペット:

private static Uri _outputFileUri; 
private static File _file; 
private ImageView _image; 
private SimpleDateFormat _simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); 


    _takePicture = (Button) findViewById(R.id.takePicture); 
    _takePicture.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 

      _intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   

      _file = new File(Environment.getExternalStorageDirectory() + 
          "/Android/data/my own folder/files/", 
          _simpleDateFormat.format(new Date()).toString() + 
          ".jpg"); 

      _outputFileUri = Uri.fromFile(_file); 

      _intent.putExtra(MediaStore.EXTRA_OUTPUT, _outputFileUri); 
      startActivityForResult(_intent, CAMERA_ACTIVITY); 
     } 
    }); 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_CANCELED) { 
     Toast.makeText(this, "Activity cancelled", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    switch (requestCode) { 

     case CAMERA_ACTIVITY: 

      if (resultCode == RESULT_OK) { 

       try{ 
        Bitmap b = MediaStore.Images.Media.getBitmap(getContentResolver(), _outputFileUri); 
        _image.setImageBitmap(b); 
        _image.invalidate(); 
       } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
      break; 
    } 
} 

答えて

0

は、次の行を削除してください:この方法で画像wouldn」

Bitmap b = (Bitmap) data.getExtras().get("data"); 
_image.setImageBitmap(b); 
_image.invalidate(); 

_file = new File(Environment.getExternalStorageDirectory() + 
          "/Android/data/my own folder/files/", 
          _simpleDateFormat.format(new Date()).toString() + 
          ".jpg"); 

      _outputFileUri = Uri.fromFile(_file); 

      _intent.putExtra(MediaStore.EXTRA_OUTPUT, _outputFileUri); 

をも意図から画像を取得するためのコードを更新sdカードまたはデフォルトの場所に保存されます。

+1

はい、私はそれを試してみましたが、同様のきました。問題は1)ビットマップb =(ビットマップ)data.getExtras()。get( "data");小さな縮小された粗い画像(別名サムネイル)のみを返し、2)フルサイズの通常画像はexternal_sdのデフォルトの場所に保存されます。 – Steve

+0

私はエミュレータでそれをテストし、画像を保存しません。画像サイズの問題については、バグのようですが、この[post](http://groups.google.com/group/android-developers/browse_thread/thread/94a5df65f96c5fbe)を参照してください。 – Vikas

0

私は同じ問題があり、あきらめました。私のコードに何が変更されたのかわからないが、MediaStoreの欠陥だと思う(私の未解決の質問をチェックする:Weird camera Intent behavior

あなたがすでに持っているように画像URI、ImageViewsのビットマップを設定するのにどうしたらいいですか?

// void setImageURI(Uri uri) 
_image.setImageBitmap(_outputFileUri); 
1

これはデバイス依存の動作です。私の見解では、HTCデバイスにはこの重複の問題はありませんが、Samsungデバイスはそうしています。

0

私はこの問題を持っていたし、ここで私はそれを解決する方法である:

File createImageFile() throws IOException{ 

    String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String filename = "IMG_"+timestamp+"_"; 
    File image = File.createTempFile(filename,".jpg",mGalleryFolder); 
    if (image.length() == 0){ 
     boolean delete = image.delete(); 
    } 
    mLocation = image.getAbsolutePath(); 
    return image; 
} 

それは正確に解くことではないのですが、私の作品;)