SurfaceCréé () Jamais appelé

J'ai rencontré des problèmes similaires à celui que j'ai, mais je ne trouve toujours pas de solution. Je suis très nouveau pour le développement Android, alors j'ai du mal à résoudre mon problème. Quoi qu'il en soit, j'essaie de créer un aperçu de l'appareil photo en utilisant une classe CameraSurfaceView que j'ai créée qui étend SurfaceView et implémente SurfaceHolder.Callback. Peu importe ce que j'essaie dans ma classe StartCamera, la méthode surfaceCreated () n'est jamais appelée, d'où ma caméra ne démarre jamais. Toute aide serait géniale, merci!

StartCamera.java

  • EGL_BAD_MATCH erreur Android Studio
  • Comment envoyer un périphérique à la notification de l'appareil en utilisant FCM sans utiliser XMPP ou tout autre script.?
  • Est-il possible d'utiliser un Animateur Android pour animer une entrée DialogFragment?
  • Configuration Android de la couleur de la vue du texte à partir du code java
  • Faire en sorte que le bord de la défilement disparaisse lorsque vous faites défiler dans Android
  • Avertissement Android Proguard: ne peut pas écrire de ressource (entrée zip en double)
  • import net.peterd.zombierun.R; import android.hardware.Camera; import android.os.Bundle; import android.widget.FrameLayout; public class StartCamera extends BaseActivity { private Camera mCamera; private CameraSurfaceView mView; public void onCreate(Bundle state) { // TODO Auto-generated constructor stub super.onCreate(state); setContentView(R.layout.start_camera); } public void onResume() { super.onResume(); mView = new CameraSurfaceView(this); FrameLayout preview = (FrameLayout) findViewById(R.id.cPreview); preview.addView(mView); } public void onPause() { mCamera.stopPreview(); mCamera.release(); } } 

    CameraSurfaceView.java

     import java.io.IOException; import android.content.Context; import android.hardware.Camera; import android.view.SurfaceHolder; import android.view.SurfaceView; public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; private Camera camera; public CameraSurfaceView(Context context) { super(context); //Initiate the Surface Holder properly this.holder = this.getHolder(); this.holder.addCallback(this); this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override public void surfaceCreated(SurfaceHolder holder) { try { //Open the Camera in preview mode this.camera = Camera.open(); this.camera.setPreviewDisplay(this.holder); } catch(IOException ioe) { ioe.printStackTrace(System.out); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(width, height); camera.setParameters(parameters); camera.startPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when replaced with a new screen //Always make sure to release the Camera instance camera.stopPreview(); camera.release(); camera = null; } public Camera getCamera() { return camera; } } 

    Start_camera.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@+id/cPreview" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent"> </FrameLayout> </LinearLayout> 

  • AdbCommandRejectedException obtenant des propriétés lors du test sur l'émulateur
  • Comment supprimer l'espace supérieur et inférieur sur la vue de texte d'Android
  • Un Java Runtime Environment (JRE) ou Java Development Kit (JDK) doit être disponible pour exécuter Eclipse
  • Comment rafraîchir un fragment d'un FragmentPagerAdapter?
  • OnSaveInstanceState () et onRestoreInstanceState ()
  • Modification de la taille de la barre de recherche par programme, mais ne peut pas obtenir que le pouce soit plus grand que la barre
  • 4 Solutions collect form web for “SurfaceCréé () Jamais appelé”

    Apparemment, cela est dû au fait que FrameLayout est vide et ne crée donc aucun type de SurfaceView. Vous pouvez essayer de forcer la hauteur et la largeur parentales du LinearLayout manuellement ou simplement d'ajouter une imageView dans FrameLayout. Étant donné que FrameLayout peut contenir de nombreux widgets, mais il ne présente que le dernier d'entre vous, vous pouvez mettre un ImageView dans FrameLayout montrant une petite image uniquement pour que SurfaceView soit créée.

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@+id/cPreview" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- Adding small dummy image --> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" src="@drawable/small_picture"> </FrameLayout> </LinearLayout> 

    J'ai eu le même problème. Pour moi, c'est parce que la taille de la vue était réglée sur 0 et, par conséquent, la surface n'a jamais été créée. J'ai vérifié cela en définissant une taille spécifique, et tout à coup les rappels ont été appelés. (Le même, apparemment, tient si la vue est affichée hors écran).

    @jvnane J'ai essayé votre code, cela fonctionne, avec un bug mineur.

    surfaceChanged s'appelle sans problème. De quelle manière vous pensez que cela ne fonctionne pas? Essayez d'ajouter un message de débogage et de le voir dans LogCat:

     @Override public void surfaceCreated(final SurfaceHolder holder) { Log.i("Camera Test", "It works!"); try { //Open the Camera in preview mode this.camera = Camera.open(); this.camera.setPreviewDisplay(this.holder); } catch(final IOException ioe) { ioe.printStackTrace(System.out); } } 

    Bug mineur: l'objet de la Camera est libéré dans surfaceDestroyed afin que vous n'ayez pas besoin de le onPause l' onPause l'activité. En outre, vous devez appeler super.onPause() lors de la onPause() méthode onPause() .

    J'ai eu des erreurs de cette ligne dans la méthode surfaceChanged , surfaceChanged :

     camera.setParameters(parameters); 

    Cela a bien fonctionné une fois que j'ai commenté cela.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.