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

1

是的,您可以使用 Camera Api 来完成。

Android 中的相机 API

无需为捕获而执行任何 UI,然后 Image 只需使用服务或任何后台线程或根据需要调用相机 api。

于 2013-07-17T07:05:19.197 回答
0

Something like this...

mPreview.getCamera().autoFocus(autoFocusCallback);

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

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

So you'd just call autoFocus to get the ball rolling on the photo taking process.

于 2013-07-17T07:13:14.640 回答