3

おそらく90%の確率で、コールバックはトリガーに失敗します。したがって、私の写真は保存されません。

私は何が間違っているのですか?

   @Override
public boolean onTouchEvent(MotionEvent event)
{
    boolean result = super.onTouchEvent(event);

       int action = event.getAction();
       if(action == MotionEvent.ACTION_DOWN)
       {
           takePicture();

           this.finish(); // ERROR IS HERE. Closing down before callback is done.

       }    
       return result;
}

private void takePicture() {
    if (mCamera != null)
        mCamera.takePicture(shutterCallback, null, jpegCallback);     
}

ShutterCallback shutterCallback = new ShutterCallback() {
      public void onShutter() {

          AudioManager meng = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
            int volume = meng.getStreamVolume( AudioManager.STREAM_NOTIFICATION);

            if (volume != 0)
            {
                    MediaPlayer _shootMP = MediaPlayer.create(getBaseContext(), Uri.parse("file:///system/media/audio/ui/camera_click.ogg"));
                    _shootMP.start();
            }
      Toast.makeText(CameraActivity.this, "Picture Taken", Toast.LENGTH_SHORT).show();
      }
};

PictureCallback rawCallback = new PictureCallback() {
      public void onPictureTaken(byte[] _data, Camera _camera) {
        // TODO Do something with the image RAW data.
          int test = 1;
      }
};

PictureCallback jpegCallback = new PictureCallback() {
  public void onPictureTaken(byte[] _data, Camera _camera) {
      File photo=new File(Environment.getExternalStorageDirectory(), "photo1.jpg");

      if (photo.exists()) {
            photo.delete();
      }

      try {
        FileOutputStream fos=new FileOutputStream(photo.getPath());

        fos.write(_data);
        fos.close();
      }
      catch (java.io.IOException e) {
        Log.e("PictureDemo", "Exception in photoCallback", e);
      }



      SqlDB.SavePhoto(1, _data);      
  }
};
4

1 に答える 1

2

関数rawCallbackまたはjpegCallbackのいずれかでデバッグして確認できますか。カメラの jpeg 形式を設定しているかどうか。それに応じてコールバック関数が呼び出されると思います。したがって、rawCallback または jpegCallback のいずれかに入る必要があります。一度お試しいただけますか。

mCamera.takePicture(shutterCallback, rawCallback , jpegCallback);

失敗している場合は、カメラを再び開いている場所にある可能性があります。この場合、カメラのパラメーターがリセットされ、jpeg の代わりに生のコールバックが返される可能性があると思います

実際、カメラがクラッシュしておらず、null でない場合は、カメラをデフォルト設定でリセットするか、カメラを再度開いている場合のみが残ると思います..

于 2012-05-14T11:29:01.103 に答える