我正在尝试学习如何在我的Android应用程序中使用相机。我目前有一个工作预览,并带有覆盖按钮。我已经成功地设置了拍照,但是当我尝试将照片保存到SD卡时,它不起作用。它总是返回“保存期间出现错误”。
我知道这不是我的SD卡的问题,而且我以前在另一个应用程序中使用几乎相同的代码来保存位图,那个应用程序可以成功运行。
我也知道它成功地拍摄了一张照片,因为我通过让它将照片放入活动中的ImageView中进行了测试。
我不确定为什么这不起作用。
我知道这不是我的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();
}
}