Android: rób zdjęcia bez interfejsu użytkownika

Interesuje mnie pisanie aplikacji dla Androida, gdzie po pewnym wydarzeniu w aplikacji zdjęcie jest automatycznie wykonywane za pomocą aparatu na Androida.

Czego potrzebuję:

Brak podglądu zdjęcia

Brak przycisku dla użytkownika, aby nacisnąć, aby zrobić zdjęcie

Wystarczy uruchomić operację, aby zrobić zdjęcie i zapisać je w albumie.

Oto kod, który próbowałem z samouczka online:

public void snap(){
       mCamera = Camera.open();
       SurfaceView sv = new SurfaceView(getApplicationContext());


       try {
                  mCamera.setPreviewDisplay(sv.getHolder());
                  parameters = mCamera.getParameters();

                   //set camera parameters
                 mCamera.setParameters(parameters);
                 mCamera.startPreview();
                 mCamera.takePicture(null, null, mCall);

            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }


       //Get a surface
         sHolder = sv.getHolder();

}
 Camera.PictureCallback mCall = new Camera.PictureCallback()
    {

       public void onPictureTaken(byte[] data, Camera camera)
       {
             //decode the data obtained by the camera into a Bitmap

             FileOutputStream outStream = null;
                  try{
                      outStream = new FileOutputStream("/sdcard/Image.jpg");
                      outStream.write(data);
                      outStream.close();
                  } catch (FileNotFoundException e){
                      Log.d("CAMERA", e.getMessage());
                  } catch (IOException e){
                      Log.d("CAMERA", e.getMessage());
                  }

       }
    };


      public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
      }

wraz z logcatem tego, co zrobił

    11-24 01:54:37.738: E/AndroidRuntime(6971): FATAL EXCEPTION: main                                                                                                                  
    11-24 01:54:37.738: E/AndroidRuntime(6971): java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.example.udptest/com.example.udptest.Main}: java.lang.RuntimeException: takePicture failed
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread.access$600(ActivityThread.java:153)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.os.Looper.loop(Looper.java:137)
    11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread.main(ActivityThread.java:5227)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at java.lang.reflect.Method.invokeNative(Native Method)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at java.lang.reflect.Method.invoke(Method.java:511)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at dalvik.system.NativeStart.main(Native Method)
11-24 01:54:37.738: E/AndroidRuntime(6971): Caused by: java.lang.RuntimeException: takePicture failed
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.hardware.Camera.native_takePicture(Native Method)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.hardware.Camera.takePicture(Camera.java:1101)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.hardware.Camera.takePicture(Camera.java:1046)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at com.example.udptest.Main.snap(Main.java:129)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at com.example.udptest.Main.onCreate(Main.java:84)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.Activity.performCreate(Activity.java:5104)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-24 01:54:37.738: E/AndroidRuntime(6971):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)
11-24 01:54:37.738: E/AndroidRuntime(6971):     ... 11 more

Jakieś pomysły, co tu się dzieje, albo lepszy sposób na wykonanie tego zadania?

questionAnswers(3)

yourAnswerToTheQuestion