2016-05-08 12 views
1

画像の撮影間隔が1秒以上の場合は、動作すると言います。たとえば、2秒ごとに写真を撮ると、完璧に機能します。しかし毎秒写真を撮る時々java.lang.RuntimeException: takePicture failedを投げる。この種の行動を引き起こす原因は何でしょうか?ここでAndroidカメラが毎秒写真を撮ることができません

は、私が使用したコードであり、それはにサービスです:

@Override 
public void onCreate() 
{ 
    super.onCreate(); 
    prefs = getSharedPreferences("general",Context.MODE_PRIVATE); 
    handler = new Handler(); 

    shotInterval = prefs.getInt(getString(R.string.prefs_int_imageShootingFrequency),1); 

    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
     Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG).show(); 
    } else { 
     cameraId = findBackFacingCamera(); 
     if (cameraId < 0) { 
      Toast.makeText(this, "No front facing camera found.",Toast.LENGTH_LONG).show(); 
     } else { 
      camera = Camera.open(cameraId); 
     } 
    } 

    cameraParameters = camera.getParameters(); 
    cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); //set camera to continuously auto-focus 
    camera.setParameters(cameraParameters); 

    pictureTaker.run(); // Start looping 
} 

Runnable pictureTaker = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      takePicture(); 
     } finally { 
      // 100% guarantee that this always happens, even if 
      // your update method throws an exception 
      handler.postDelayed(pictureTaker, shotInterval*1000); 
     } 
    } 
}; 

private void takePicture(){ 
    SurfaceView view = new SurfaceView(this); 
    try { 
     camera.setPreviewDisplay(view.getHolder()); 
     camera.startPreview(); 
     camera.takePicture(null, null,new PhotoHandler(getApplicationContext())); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

私はカメラが'' 'takePicture'''を呼び出すときに次の画像を撮る準備ができていません。 1秒間隔はかなり速いようです。 –

+0

私はそれを成功させるプログラム(カメラ2 APIを使用していない)を見てきました。不思議なことは時にはうまくいくことがあり、時にはうまくいかないことです。 – Shard

+0

これらのプログラムは異なるハードウェアで動作している可能性があります。あなたのカメラはちょっと遅くなるかもしれません。 –

答えて

1

あなたはonPictureTaken()コールバックからpostDelayed()を起動する必要があります。 takePicture()へのコールでシステムタイマーを確認し、それぞれ1000msの繰り返しを保つために遅延を減らすことができますが、しばらくしてからこの遅延は0になります。

+0

は、camera2 APIの 'onPictureTaken()'ではありませんか? – Shard

+0

いいえ、[リンク](http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html#onPictureTaken(バイト%5B%5D、%20android.hardware.Camera))に従ってください。 –

関連する問題