Kamera-Vorschau wird nicht neu gestartet?
Arbeite ich an den Kamera-code in android Bild nehmen und speichern Sie es auf dem Handy. Es nimmt das Bild von Handy-Kamera, und speichert diese auf der Speicherkarte. Das problem ist nur, dass die Kamera-Vorschau wird nicht neu starten, nach der Aufnahme des Bildes.
Ich kann nicht herausfinden, die Lösung. Code ist wie folgt. Vorschläge erforderlich sind . . .
Es gibt zwei Klassen in meinem Projekt . . .
CAMERAACTIVITY KLASSE
public class CameraActivity extends Activity
{
private static final String TAG = "CameraDemo";
Preview preview;
Button buttonClick;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preview = new Preview(this);
((FrameLayout) findViewById(R.id.preview)).addView(preview);
buttonClick = (Button) findViewById(R.id.buttonClick);
buttonClick.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
});
Log.d(TAG, "onCreate'd");
}
//Called when shutter is opened
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d(TAG, "onShutter'd");
}
};
//Handles data for raw picture
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken - raw");
}
};
//Handles data for jpeg picture
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
//Write to SD Card
outStream = new FileOutputStream(String.format("/sdcard/DCIM/queries.jpg",
System.currentTimeMillis()));
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
}
Album Vorhören Klasse
class Preview extends SurfaceView implements SurfaceHolder.Callback{
private static final String TAG = "Preview";
SurfaceHolder mHolder; //<2>
public Camera camera; //<3>
Preview(Context context) {
super(context);
//Install a SurfaceHolder.Callback so we get notified when the
//underlying surface is created and destroyed.
mHolder = getHolder(); //<4>
mHolder.addCallback(this); //<5>
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //<6>
}
//Called once the holder is ready
public void surfaceCreated(SurfaceHolder holder) { //<7>
//The Surface has been created, acquire the camera and tell it where
//to draw.
camera = Camera.open(); //<8>
try {
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "landscape");
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
//Called for each frame previewed
public void onPreviewFrame(byte[] data, Camera camera) {
Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis());
Preview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
//Called when the holder is destroyed
public void surfaceDestroyed(SurfaceHolder holder) {
//Log.d(TAG,"Stopping preview in SurfaceDestroyed().");
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera = null;
}
//Called when holder has changed
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
camera.startPreview();
}
}
InformationsquelleAutor user1388142 | 2012-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Artikel über die Kamera von Android-API-Handbuch leidet auch unter dem gleichen problem. Ich konnte das Album zurück, nachdem Sie die Einnahme von Bildern durch hinzufügen von zwei mehr Sachen wie folgende:
1) Fügen Sie externe Speicher Erlaubnis in der
AndroidManifest.xml
Datei:2) Starten Sie die Vorschau erneut, durch den Aufruf
camera.startPreview()
. In deinem code:Ich bin sicher, dass Sie werde in der Lage sein, um Ihnen zu arbeiten in der gleichen Weise.
InformationsquelleAutor Jindor
Start der CAMERAACTIVITY wieder in onPictureTaken wie diese:
Wenn Sie möchten, können Sie auch mithilfe von Thread.sleep(2000); so dass das aufgenommene Bild wird 2 Sekunden lang angezeigt und dann wieder die Aktivität der Kamera zu starten.
InformationsquelleAutor Shrikant
hinzufügen
Thread.Sleep(2000);
Kamera.startPreview();
so, dass die Kamera das aufgenommene Bild für 2 Sek. und Neustart die Kamera.
InformationsquelleAutor Prashant