2012-07-06 111 views
3

我想了解如何在我的android應用程序中使用相機。我現在有一個覆蓋按鈕的工作預覽。我已經設置成可以成功拍攝照片,但是當我嘗試將照片保存到SD卡時,它無法正常工作。它總是會返回「保存期間的錯誤」。Android:保存照片用戶使用相機

我知道這不是我的SD卡,而且我在另一個應用程序中使用幾乎相同的確切代碼來保存位圖,該位圖可以成功運行。

我也知道它正在成功拍照,因爲我通過將照片放入活動中的ImageView來測試它。

我不知道爲什麼這不起作用。

Button takePhoto = (Button)findViewById(R.id.takephoto); 
    takePhoto.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 



      mCamera.takePicture(shutterCallback, rawCallback, 
        jpegCallback); 




     } 
    }); 




} 


ShutterCallback shutterCallback = new ShutterCallback() { 
    public void onShutter() { 

    } 
}; 

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] arg0, Camera camera) { 



    } 
}; 

/** Handles data for jpeg picture */ 
PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] arg0, Camera camera) { 

     Bitmap photo = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 

     tempSavePhoto(photo); 

     switchToPolaroidView(); 

    } 
}; 



public void tempSavePhoto(Bitmap photo){ 

    File root = new File(Environment.getExternalStorageDirectory() + File.separator + "Photos"); 
    File image = new File(root, "toSend.jpg"); 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

    boolean success = false; 

    FileOutputStream outStream; 
    try { 

     outStream = new FileOutputStream(image); 
     photo.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     /* 100 to keep full quality of the image */ 

     outStream.flush(); 
     outStream.close(); 
     success = true; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (success) { 
     Toast.makeText(getApplicationContext(), "Saved successfully", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       "Error during image saving", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

什麼是logcat錯誤? – kosa 2012-07-06 21:09:07

+0

沒有錯誤。它只是不保存。我得到敬酒告訴我,程序 – SillyFidget 2012-07-06 21:15:24

回答

1

我嘗試了不同的方法,它工作。不知道爲什麼另一個不工作,但它現在保存照片就好了。以下是我代替:

public void tempSavePhoto(Bitmap photo){ 

    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    photo.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 


    File f = new File(Environment.getExternalStorageDirectory() 
          + File.separator + "test.jpg"); 
    try { 
     f.createNewFile(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    FileOutputStream fo = null; 
    try { 
     fo = new FileOutputStream(f); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fo.write(bytes.toByteArray()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 


} 

請注意,我有這個想法從this post,並投了,幫助我的答案。

1

添加到您的清單

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

它更可能,這個應用程序沒有權限保存到你的其他做的SD卡。添加此授予權限

+0

中有一個錯誤,我已經將此添加到清單。謝謝你 – SillyFidget 2012-07-06 21:04:36

相關問題