2012-04-02 11 views
12

Mögliche Duplizieren in Datei:
Android Camera - Save image into a new folder in SD CardNehmen Sie das Bild mit der Kamera Vorsatz und speichern

ich versuche Bild aufzunehmen und es in einer Datei zu speichern. Das Problem kam Ich versuche, die Bitmap in eine Datei zu speichern. Hier ist mein Code:

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

Und die Ausnahmen in 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) 

Antwort

4

Ihre Fehler sagt deutlich, dass java.io.FileNotFoundException: /filename

bitte genauen Pfad zur Verfügung stellen "/ sdcard/filename"

new FileOutputStream(getExternalStorageDirectory()+"filename"); 

ODER

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

Hinweis: Fügen Sie die Berechtigung WRITE_EXTERNAL_STORAGE in der Manifestdatei hinzu.

+0

es mir TELS kein getExternalStorageDirectory ist() -Methode – Darko

+0

sehen, ich Code aktualisiert hatte. –

+0

das bedeutet, Sie haben keine SD-Karte –

7

ry den Code unten ist eine der Lösung für Ihr Problem ::

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

Formatieren Sie immer Ihren Code (STRG + UMSCHALTTASTE + F für Gott willen) beim Posten in stackoverflow, ich brauche zwei Zeilen dieses Codes und ich finde sie nicht wegen oor code Formatierung –

+0

Wie kann ich es vor dem Speichern? –

Verwandte Themen