10 votes

Prenez une photo sans aperçu Android

Je voudrais prendre une photo sans aucun aperçu. J'ai utilisé ce code mais j'obtiens une erreur :

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Camera.Parameters parameters = camera.getParameters();
    parameters.setPictureFormat(PixelFormat.JPEG);
    camera.setParameters(parameters);
    SurfaceView mview = new SurfaceView(getBaseContext());
    try {
        camera.setPreviewDisplay(mview.getHolder());
        camera.startPreview();
        camera.takePicture(null,null,photoCallback);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

 Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {

        Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
        OutputStream imageFileOS;

        try {

            imageFileOS = getContentResolver().openOutputStream(uriTarget);
            imageFileOS.write(data);
            imageFileOS.flush();
            imageFileOS.close();

            Toast.makeText(AndroidTestJNIActivity.this, "Image saved: " + uriTarget.toString(), Toast.LENGTH_LONG).show();

        } catch (FileNotFoundException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        }
        finish();

    }
};

Je reçois une NullPointerException lorsque j'essaie d'accéder à la caméra. Je ne sais pas comment l'initialiser. Je pense que le problème est que la caméra n'est jamais initialisée.

 05-29 14:40:20.330: E/AndroidRuntime(15571): FATAL EXCEPTION: main
 05-29 14:40:20.330: E/AndroidRuntime(15571): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.achillessecurity.androidtestjni/com.achillessecurity.androidtestjni.AndroidTestJNIActivity}: java.lang.RuntimeException: Fail to connect to camera service
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
05-29 14:40:20.330: E/AndroidRuntime(15571):    at android.app.ActivityThread.access$1500(ActivityThread.java:123)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.os.Handler.dispatchMessage(Handler.java:99)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.os.Looper.loop(Looper.java:130)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.ActivityThread.main(ActivityThread.java:3835)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at java.lang.reflect.Method.invokeNative(Native Method)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at java.lang.reflect.Method.invoke(Method.java:507)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at dalvik.system.NativeStart.main(Native Method)
 05-29 14:40:20.330: E/AndroidRuntime(15571): Caused by: java.lang.RuntimeException: Fail to connect to camera service
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.hardware.Camera.native_setup(Native Method)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.hardware.Camera.(Camera.java:258)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.hardware.Camera.open(Camera.java:235)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at com.achillessecurity.androidtestjni.AndroidTestJNIActivity.onCreate(AndroidTestJNIActivity.java:42)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 05-29 14:40:20.330: E/AndroidRuntime(15571):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)

J'initialise la caméra par : camera= Camera.open();

10voto

opc0de Points 5793

Utilisez ces autorisations :

Et vous pouvez instancier un objet Camera en utilisant ceci

Camera mycamera = Camera.open();

Vous pouvez essayer la méthode décrite ici qui est très simple si vous aimez la simplicité:

http://developer.android.com/training/camera/photobasics.html

0voto

Radi Points 1

Android ne peut pas utiliser l'appareil photo sans aperçu... mais vous pouvez définir la taille de l'aperçu à 1x1 px, ainsi vous ne le verrez pas et vous pourrez quand même utiliser l'appareil photo.

0voto

Sam Points 3542

En ce qui concerne votre erreur Échec de l'initialisation de la caméra, une autre possibilité est que la caméra soit utilisée par quelque chose d'autre.

0voto

Codemaker Points 639

Cela est dû au fait que la caméra ne fonctionne pas immédiatement et souvent de manière asynchrone. Certains appareils nécessitent une latence importante entre startPreview() et takePicture().

Par exemple, les appareils Samsung nécessitent au moins 100 ms pour démarrer la caméra.

Vous pouvez résoudre cette erreur en ajoutant un délai pour la méthode takePicture().

mview.postDelayed(new Runnable() {
    @Override
    public void run() {
        try {
            camera.takePicture(null, null, photoCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}, 100);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X