0
我正在制作相机应用程序,该相机应用程序在相机第一次启动时拍摄一张图像,但我得到它的唯一问题是当拍摄照片时,它会存储在文件夹中的第一个图像。例如。我安装应用程序,相机拍摄一张照片,然后下一次相机拍摄另一张照片时,它与第一张相同。我试图在数据= null之后,但是这仍然不起作用。Android相机应用程序照片复制图像
有什么建议吗?
package com.example.charlie;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PService2 extends Service {
//private myPreview mPreview;
Camera mCamera;
byte[] data;
private void PictureCallback()
{
}
private final class TakePhotoReceiver extends BroadcastReceiver {
public final Camera mCamera;
private TakePhotoReceiver(Camera mCamera) {
this.mCamera = mCamera;
}
@Override
public void onReceive(Context context, Intent intent) {
try {// TODO Auto-generated method stub
Log.v("test", "Got here");
mCamera.takePicture(null, null, mPicture);
//releaseCamera();
} finally {
releaseCamera();
}
}
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data2,Camera camera) {
Log.v("test", "image taken");
data = data2;
createExternalStoragePublicPicture(data);
data = null;
data2 = null;
//releaseCamera();
}
};
}
}
*/
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
String mCurrentPhotoPath;
void createExternalStoragePublicPicture(byte[] data) {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + ".jpg";
File image = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(image, imageFileName);
try {
image.mkdirs();
OutputStream os = new FileOutputStream(file);
os.write(data);
os.close();
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
} catch (IOException e) {
Log.w("ExternalStorage", "Error writing " + file, e);
}
data = null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("Service Started");
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
try {
//releaseCamera();
final Camera mCamera = Camera.open(0);
//myPreview mPreview = new myPreview(this, mCamera);
//FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
// preview.addView(mPreview);
this.registerReceiver(new TakePhotoReceiver(mCamera),
new IntentFilter(Intent.ACTION_SCREEN_ON));
//releaseCamera();
//mCamera.stopPreview();
//mCamera.stopPreview();
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
return START_STICKY;
}
private void releaseCamera() {
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
private FrameLayout findViewById(int cameraPreview) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
System.out.println("Service Stopped");
super.onDestroy();
mCamera.release();
//unregisterReceiver(this.TakePhotoReceiver);
Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
}
}