如何使用intent自动捕获图像,无需任何用户交互

时间:2013-07-17 07:01:09

标签: android android-camera-intent

我正在尝试开发一个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);
    }

}

};

2 个答案:

答案 0 :(得分:1)

是的,您可以使用Camera Api进行此操作。

Camera API in Android

无需任何用于捕获的UI然后Image只需使用服务或任何后台线程或您想要的方式调用相机api。

答案 1 :(得分: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即可了解拍照过程。