Appareil photo Android takePicture fonction ne prend pas d'appel de fonction de Rappel
Je suis en train de travailler sur un custom d'activité de la Caméra pour mon application.
J'ai suivi les instructions du site des Développeurs Android ici:
http://developer.android.com/guide/topics/media/camera.html
Tout semble fonctionne bien, sauf la fonction de Rappel n'est pas appelé et l'image n'est pas enregistrée. Voici mon 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;
}
}
Après avoir cliqué sur le Bouton, - je obtenir les journaux: "va maintenant prendre une photo", "libération de la caméra" et "appel terminé". L'activité termine avec succès, mais la fonction de Rappel n'a pas été appelée au cours de la
mCamera.takePicture(null, null, mPicture);
fonction (Il n'y avait pas de journaux à partir de la mPicture de rappel ou getMediaOutputFile fonctions) et il n'existe pas de fichier dans l'emplacement spécifié.
Des idées? 🙂
Merci beaucoup!
OriginalL'auteur Tomáš 'Guns Blazing' Frček | 2013-10-30
Vous devez vous connecter pour publier un commentaire.
L'appel à
mCamera.takePicture()
est asynchrone. Cela signifie que l'appel se termine immédiatement, mais le réel de la prise de photo et de traitement arrive un peu plus tard. Cependant, vous le faites immédiatement lors du retour de l'appel àmCamera.takePicture()
:Qui signifie que vous avez sorti l'appareil photo de ressources et a terminé l'Activité avant que l'appareil photo est une chance à saisir l'image et vous rappeler.
Vous avez besoin de déplacer ce code dans la méthode de rappel
onPictureTaken()
de sorte que vous relâchez les ressources et la finition de l'Activité après le rappel se produit.Je n'appelle pas
mCamera.release()
nifinish()
, et toujours à avoir ce problème. Donc, quelque chose d'autre se passe.peut-être que vous devriez ouvrir une nouvelle question au lieu d'ajouter un commentaire à cette réponse. Evidemment, votre situation est différente. L'affiche originale semblait satisfait de cette réponse.
OriginalL'auteur David Wasser
De faire comme ceci pour la prise de plusieurs images d'un seul Clic en Utilisant SurfaceView Caméra Personnalisée
et
takePicture
méthode params?OriginalL'auteur Sunil Chaudhary