J'ai une activité d'onglet avec 2 onglets (activités). Chaque onglet comporte une scène GL 3D ouverte dessinée sur une vue superficielle avec aperçu de la caméra. P>
Cependant, en fonction de l'orientation du périphérique, des onglets sont en cours de commutation. P>
Le problème est que lorsque l'autre activité commence, il appelle la caméra.Open (), qui génère une exception, affirmant que le service de caméra est indisponible. P>
En fait, le problème est que la caméra n'est pas arrêtée lorsque l'activité est en pause, en d'autres termes OnsurfaCeDestroyed () n'est pas appelée à la vue View. J'ai essayé d'arrêter la caméra lorsque l'onpause () pour les activités est appelée, mais obtenez la même erreur toujours. P>
Quiconque avait les mêmes problèmes avec des activités à onglets? N'importe quelle idée comment faire la part d'une vue de surface? P>
3 Réponses :
private SurfaceHolder.Callback mSurfaceHolderListener = new SurfaceHolder.Callback() { public void surfaceDestroyed(SurfaceHolder holder) { Log.e("TABACT", "surfaceDestroyed()"); camera.stopPreview(); camera.setPreviewCallback(null); camera.release(); camera = null; }
Trouvé la solution. Tout d'abord pour chaque activité d'onglets Créez un Framelayout qui contient toutes les vues de l'enfant. Définissez-le comme vue de contenu. Pourtant, arrêtez la caméra en appelant simplement à Onpaause () SETSPIBILIBILITY À VIEW.GONE ET VIEW.Visible à Onresume ().
Merci beaucoup pour cela. J'ai eu le problème que sur le Sony Ericsson Xperia mini le menu Activer / Désactiver USB à partir de la barre de notification déroulante a fait une pause de mon appareil photo mais n'a pas détruit la surface. Étonnamment, seul le menu Activer / Désactiverait ce problème, le menu Paramètres de débogage USB s'est comporté correctement. Utilisation de SETVIPIBILITÉ () Comme vous l'avez décrit directement pour la vue View pour l'aperçu de la caméra a résolu complètement le problème.
On dirait que cette question est assez populaire, alors j'ajoute la solution ici une fois de plus. P>
La cause fondamentale était que la surface surfacédoyée n'a jamais été appelée à la superficieviette lorsque l'application était en pause. P>
J'ai donc créé un Framelayout qui contient toutes les vues de l'enfant. Définissez-le comme vue de contenu. Pourtant, arrêtez la caméra en appelant simplement SETVisivibility (View.Gone) dans Onpaause () et View.Visible à Onresume (). Cela conduira à la destruction de la supervision. P>
C'est bon pour moi:
public void surfaceDestroyed(SurfaceHolder holder) { Log.e("TABACT", "surfaceDestroyed()"); camera.stopPreview(); camera.setPreviewCallback(null); camera.release(); camera = null; }
Avez-vous appelé les deux
.stoppreview () code> et
.Release () code> sur votre objet de caméra?