2012-04-02 21 views
12

可能性の重複をファイルに保存:私は写真を撮ると、ファイルに保存しようとしている
Android Camera - Save image into a new folder in SD Cardカメラ意図で写真を撮ると

。問題は私がファイルにビットマップを保存しようとしています。ここに私のコードは次のとおりです。

private void takePic() { 
    Intent cameraIntent = new Intent(
      android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, 2); 


} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (requestCode == 2) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      ImageView test = (ImageView) findViewById(R.id.test); 
      test.setImageBitmap(photo); 

      try { 
       FileOutputStream out = new FileOutputStream("filename"); 
       photo.compress(Bitmap.CompressFormat.JPEG, 90, out); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

そしてlogcatで例外:

04-02 14:46:51.975: W/IInputConnectionWrapper(2225): showStatusIcon on inactive InputConnection 
04-02 14:46:56.135: W/System.err(2225): java.io.FileNotFoundException: /filename (Read-only file system) 
04-02 14:46:56.135: W/System.err(2225):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
04-02 14:46:56.145: W/System.err(2225):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
04-02 14:46:56.145: W/System.err(2225):  at java.io.FileOutputStream.<init>(FileOutputStream.java:94) 
04-02 14:46:56.145: W/System.err(2225):  at java.io.FileOutputStream.<init>(FileOutputStream.java:165) 
04-02 14:46:56.145: W/System.err(2225):  at java.io.FileOutputStream.<init>(FileOutputStream.java:144) 

答えて

4

あなたのエラーはっきりjava.io.FileNotFoundException: /filename

new FileOutputStream(getExternalStorageDirectory()+"filename"); 
の正確なパス "/ SDカード/ファイル名" を記入してくださいと言っています

または

String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/name.png"; 

メモ:マニフェストファイルにWRITE_EXTERNAL_STORAGE権限を追加してください。以下のコードRY

+0

それはgetExternalStorageDirectory()メソッド – Darko

+0

参照、私は、コードを更新していたがない私を遺丘群。 –

+0

は、SDカードがないことを意味します。 –

7

はあなたの問題を解決の一つである::

static Uri capturedImageUri = null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    this.imageView = (ImageView) this.findViewById(R.id.imageView1); 
    Button photoButton = (Button) this.findViewById(R.id.button1); 
    photoButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Calendar cal = Calendar.getInstance(); 
      File file = new File(Environment.getExternalStorageDirectory(), (cal.getTimeInMillis() + ".jpg")); 
      if (!file.exists()) { 
       try { 
        file.createNewFile(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } else { 
       file.delete(); 
       try { 
        file.createNewFile(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      capturedImageUri = Uri.fromFile(file); 
      Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
      startActivityForResult(i, CAMERA_RESULT); 
     } 
    }); 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) { 
      //Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      //imageView.setImageBitmap(photo); 
      try { 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), capturedImageUri); 
       imageView.setImageBitmap(bitmap); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
+7

stackoverflowに投稿する際には、常にコードを整形してください(この場合は、Ctrl + Shift + Fキーを押してください)。このコードは2行必要ですが、コードが見つかりません –

+0

保存する前にどうすればいいですか? –

関連する問題