1

ユーザーからの操作なしでカメラの意図を使用して自動的に写真を撮るAndroidアプリケーションを開発しようとしていますが、画像キャプチャアクションを自動的にトリガーするコードを取得できません。誰か助けて??. これが私のコードです

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pictureButton = findViewById(R.id.captureFront);
    countDownTimer = new MyCountDownTimer(startTime, interval);

    if (!timerHasStarted) {
        countDownTimer.start();
        timerHasStarted = true;

    } else {
        countDownTimer.cancel();
        timerHasStarted = false;
        // startB.setText("RESTART");
    }

}

public void pictureCapture() throws IOException {
    pictureButton.setEnabled(true);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File sampleDir = Environment.getExternalStorageDirectory();
    try {
        imagefile = File.createTempFile("image", ".jpeg", sampleDir);
    } catch (IOException e) {
        Log.e(TAG, "sdcard access error");
        return;
    }
    takePicture(shutter, raw, postview, jpeg);

    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

}

public final void takePicture(Camera.ShutterCallback shutter,
        Camera.PictureCallback raw, Camera.PictureCallback postview,
        Camera.PictureCallback jpeg) {

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(this, "Image saved to:\n" + data.getData(),
                    Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
            Toast.makeText(this, "Image cancelled", Toast.LENGTH_LONG)
                    .show();
        } else {
            // Image capture failed, advise user
            Toast.makeText(this, "Image failed", Toast.LENGTH_LONG).show();
        }
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public class MyCountDownTimer extends CountDownTimer {
    public MyCountDownTimer(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public void onFinish() {
        // text.setText("Time's up!, finishes");
        countDownTimer.cancel();
        try {
            pictureCapture();

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

    }

    @Override
    public void onTick(long millisUntilFinished) {
        // text.setText("" + millisUntilFinished / 1000);
    }

}

};

4

2 に答える 2

0

このようなもの...

mPreview.getCamera().autoFocus(autoFocusCallback);

Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback() {
    public void onAutoFocus(boolean success, Camera camera) {   

        mPreview.getCamera().takePicture(shutterCallback, null,  jpegCallback); 
    }
};

autoFocusしたがって、写真撮影プロセスでボールを転がすために呼び出すだけです。

于 2013-07-17T07:13:14.640 に答える