在这里,我创建了一个应用程序,用于拍摄图像并将其保存到手机的外部存储设备中。 (以下代码也存在问题,图像未保存到指定位置。)我只想将最后拍摄的图像保存在手机的外部存储器中。每次我拍摄新照片,我需要删除以前拍摄的图像并仅保存最后拍摄的图像。我该怎么做? 也可以定期连续拍摄图像吗?我搜索了一下,发现我可以使用Timer()来完成。可能吗?谢谢。
编辑 - 实际上我想要的是共同拍摄两张照片。一个是在此刻采取,另一个是在它之前采取。 (我定期拍摄图像,并将新图像与前一图像进行比较。)仅在比较后,我删除了之前的图像。
public class MyCamera extends Activity {
private Camera mCamera;
private CameraPreview mCameraPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCamera = getCameraInstance();
mCameraPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mCameraPreview);
Button captureButton = (Button) findViewById(R.id.button_capture);
captureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, mPicture);
}
});
}
/**
* Helper method to access the camera returns null if it cannot get the
* camera or does not exist
*
* @return
*/
private Camera getCameraInstance() {
Camera camera = null;
try {
camera = Camera.open();
} catch (Exception e) {
// cannot get camera or does not exist
}
return camera;
}
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, e.getMessage());
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
};
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
if (!mediaStorageDir.exists()) {
mediaStorageDir.mkdirs();
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
String fname = "IMG_" + timeStamp + ".jpg";
System.out.println(fname);
File mediaFile;
mediaFile = new File(mediaStorageDir, fname);
return mediaFile;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_camera, menu);
return true;
}
}
答案 0 :(得分:0)
您可以为照片文件保留一个常量名称。
String fname = "MyImage.jpg";
你可以给一些不变的名字。关于定期拍摄图像,您可以使用处理程序。 您可以阅读更多相关信息here。 并确保在相机关闭时移除处理程序。
<强> EDITED 强>
您可以在您的案例中列出目录的文件mediaStorageDir
。
列出目录的所有文件,并通过比较上次修改的文件删除较旧的文件。