Ich habe einen Dienst implementiert, um ein Bild von einem Hintergrund-Thread aufzunehmen, aber das Foto wird nie auf einem meiner Geräte aufgenommen ... hier ist der Code (Protokollausgabe unten) :Android-Kamera kann kein Foto vom Hintergrunddienst aufnehmen
public class PhotoCaptureService extends Service {
private static final String TAG = "PhotoCaptureService";
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "Starting the PhotoCaptureService");
takePhoto();
}
private void takePhoto() {
Log.d(TAG, "Preparing to take photo");
Camera camera = null;
try {
camera = Camera.open();
} catch (RuntimeException e) {
Log.e(TAG, "Camera not available", e);
return;
}
if (null == camera) {
Log.e(TAG, "Could not get camera instance");
return;
}
Log.d(TAG, "Got the camera, creating the dummy surface texture");
SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
try {
camera.setPreviewTexture(dummySurfaceTexture);
} catch (Exception e) {
Log.e(TAG, "Could not set the surface preview texture", e);
}
Log.d(TAG, "Preview texture set, starting preview");
camera.startPreview();
Log.d(TAG, "Preview started");
camera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "Photo taken, stopping preview");
camera.stopPreview();
Log.d(TAG, "Preview stopped, releasing camera");
camera.release();
Log.d(TAG, "Camera released");
}
});
}
Protokollierung Ausgang:
D/PhotoCaptureService﹕ Starting the PhotoCaptureService
D/PhotoCaptureService﹕ Preparing to take photo
D/PhotoCaptureService﹕ Got the camera, creating the dummy surface texture
D/PhotoCaptureService﹕ Preview texture set, starting preview
D/PhotoCaptureService﹕ Preview started
An diesem Punkt nichts anderes wird nie geworfen kein Fehler oder eine Ausnahme genannt, und es ist, das onPictureTaken Verfahren geschieht. Weiß jemand, warum das passiert? Ich habe mir jedes Kamera-Tutorial zu StackOverflow angeschaut und nichts scheint zu funktionieren.
1. Dienst läuft nicht im Hintergrund Thread. Um den gewünschten Hintergrunddienst zu verwenden, müssen Sie IntentService erweitern. 2. Bitte geben Sie uns Stack-Trace von der Ausnahme. –
Dies ist die Art von Stack-Trace, die er bekommen könnte, da ich das gleiche Problem habe – Zeeshan
hast du es funktioniert? – VickyS