Android-Kamera takePicture-Funktion nicht aufrufen, Callback-Funktion
Arbeite ich auf einer benutzerdefinierten Aktivität der Kamera für meine Anwendung.
Ich habe die Anleitung aus dem Android-Entwickler-Website hier:
http://developer.android.com/guide/topics/media/camera.html
Scheint alles funktioniert gut, außer die Callback-Funktion nicht aufgerufen, und das Bild wird nicht gespeichert. Hier ist mein code:
public class CameraActivity extends Activity {
private Camera mCamera;
private CameraPreview mPreview;
private static final String TAG = "CameraActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
//Create an instance of Camera
mCamera = getCameraInstance();
//Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
Button captureButton = (Button) findViewById(R.id.button_capture);
captureButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "will now take picture");
mCamera.takePicture(null, null, mPicture);
Log.v(TAG, "will now release camera");
mCamera.release();
Log.v(TAG, "will now call finish()");
finish();
}
});
}
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v(TAG, "Getting output media file");
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
Log.v(TAG, "Error creating output file");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.v(TAG, e.getMessage());
} catch (IOException e) {
Log.v(TAG, e.getMessage());
}
}
};
private static File getOutputMediaFile() {
String state = Environment.getExternalStorageState();
if (!state.equals(Environment.MEDIA_MOUNTED)) {
return null;
}
else {
File folder_gui = new File(Environment.getExternalStorageDirectory() + File.separator + "GUI");
if (!folder_gui.exists()) {
Log.v(TAG, "Creating folder: " + folder_gui.getAbsolutePath());
folder_gui.mkdirs();
}
File outFile = new File(folder_gui, "temp.jpg");
Log.v(TAG, "Returnng file: " + outFile.getAbsolutePath());
return outFile;
}
}
Nachdem Sie auf die Schaltfläche, erhalte ich die logs: von "jetzt-Bild", "wird nun der release-Kamera" und "rufen Sie jetzt fertig". Die Aktivität endet erfolgreich, aber die Callback-Funktion nicht aufgerufen wurde, während die
mCamera.takePicture(null, null, mPicture);
Funktion (Es wurden keine Protokolle aus der mPicture Rückruf oder getMediaOutputFile Funktionen) und es gibt keine Datei in den Speicherort, der angegeben wurde.
Irgendwelche Ideen? 🙂
Viel Dank!
- Ich brauche etwas Hilfe für die gleiche in C#.. Bitte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Aufruf
mCamera.takePicture()
asynchron ist. Das bedeutet, dass der Aufruf sofort abgeschlossen, sondern die tatsächlichen Bildaufnahme und-Verarbeitung passiert irgendwann später. Jedoch, tun Sie dies sofort nach der Rückkehr aus dem AufrufmCamera.takePicture()
:Das bedeutet, dass Sie veröffentlicht die Kamera-Ressourcen und beendet die Aktivität vor die Kamera bekommt eine chance, tatsächlich nehmen Sie das Bild und rufen Sie zurück.
Müssen Sie zu bewegen, dass code in die callback-Methode
onPictureTaken()
so dass Sie die Ressourcen freigeben und beenden Sie die Aktivität nach der Rückruf erfolgt.mCamera.release()
nochfinish()
, und immer noch das problem. Also etwas anderes kann passieren.Machen Sie es wie dieses für die Aufnahme von mehreren Bildern auf Klick Mit SurfaceView Benutzerdefinierte Kamera
und
takePicture
Methode params?