Je suis un programmeur débutant pour Android J'essayais de démarrer l'aperçu de la caméra dans Android sur le clic du bouton. J'essaie directement d'accéder au matériel de la caméra plutôt que d'utiliser l'application de caméra par défaut. Voici le code que j'ai écritImpossible de démarrer la caméra Aperçu sur le bouton cliquez sur
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class CameraHandler extends Activity {
private SurfaceView sv = null;
private SurfaceHolder previewHolder = null;
private Button btnStop;
private Button btnStart;
private Camera camera = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cameraview);
// Get the surface view from main layout
sv = (SurfaceView) findViewById(R.id.cameraSurface);
// Get the buttons from XML
btnStart = (Button) findViewById(R.id.startButton);
btnStop = (Button) findViewById(R.id.stopButton);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SurfaceHolder.Callback surfaceCallBack = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.release();
camera = null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera = Camera.open();
try {
camera.setPreviewDisplay(previewHolder);
} catch (Throwable t) {
// TODO Auto-generated catch block
Log.e("PreviewDemo-surfaceCallback",
"Exception in setPreviewDisplay()", t);
Toast.makeText(CameraHandler.this, t.getMessage(),
Toast.LENGTH_LONG).show();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
// TODO Auto-generated method stub
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(width, height);
camera.setParameters(parameters);
camera.startPreview();
}
};
// Get the surface holder from the surface view
previewHolder = sv.getHolder();
// Now add these call backs
previewHolder.addCallback(surfaceCallBack);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
camera.stopPreview();
}
});
}
}
Comme vous pouvez le voir, je suis en train de superficiaire de la SurfaceView en XML ajoutant un rappel lorsque le bouton de démarrage est cliqué. Pour une raison quelconque, le rappel SufraceHolder n'est pas appelé. Mais si je place tout ce code directement dans la fonction OnCreate, cela fonctionne très bien. L'aperçu de la caméra commence dès que l'activité est lancée. Est-ce que j'ai râté quelque chose?
Merci à l'avance
Oh .. Merci pour la réponse rapide. Hey est-il possible de réaliser cela, je veux dire commencer l'aperçu de la caméra en cliquant sur un bouton? – copyninja
@Vasudev: appelez camera.startPreview() dans votre OnClickListener, mais faites d'abord le reste de l'installation. – CommonsWare
cela a fonctionné! Merci beaucoup :) – copyninja