Android 当onPictureTaken()被执行并返回时,如何得到通知?

Android 当onPictureTaken()被执行并返回时,如何得到通知?,android,android-camera,Android,Android Camera,我有一个初始化为null的类变量photoPath private static string photoPath = null; 然后在onPictureTaken的主体内,为该变量指定了一个特定的字符串值 final PictureCallback pictureCallback = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) {

我有一个初始化为null的类变量photoPath

private static string photoPath = null;
然后在onPictureTaken的主体内,为该变量指定了一个特定的字符串值

final PictureCallback pictureCallback = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Log.i(TAG, "onPictureTaken() of Camera.PictureCallback called.");// check
        ...
        photoPath = aValidPathString;
        ...
    }
}
然后在按钮的click listener中,我调用了Camera.takePicture方法。之后,我已经注销了photoPath的值。光路的这个值在输出中是空的;在摄像机的PictureTaken上,调用PictureCallback。从未在输出中打印。这意味着在我注销photoPath的值时不会调用onPictureTaken

所以我想知道onPictureTaken何时返回,这样我就可以确定onPictureTaken已经被执行了,并且我在那个时候注销了photoPath的值。我该怎么做


只需等待从pictureCallback接收CaptureCompleted回调:

 private CameraCaptureSession.CaptureCallback pictureCallback = new CameraCaptureSession.CaptureCallback() {

        @Override
        public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                       @NonNull CaptureRequest request,
                                       @NonNull TotalCaptureResult result) {

            // your picture has been taken
    };

拍照是异步的。在onClick返回之前,拍摄工作甚至都不会开始。移动需要onPictureTaken路径的代码。@Commonware谢谢,我正在这样做。但你否决了我的问题吗?如果是的话,你能告诉我原因吗?但是你否决了我的问题吗不,我没有。这里所说的异步,我的意思是takePicture立即返回,而不需要拍照。而且,由于onPictureTaken将在主应用程序线程上调用,因此即使takePicture开始工作,也无法使用onPictureTaken调用您,直到onClick返回后的某个时间,因为您的onClick代码也在主应用程序线程上运行。我花了很多时间使用onPictureTaken.:-但是,是的,这应该被记录下来。
 private CameraCaptureSession.CaptureCallback pictureCallback = new CameraCaptureSession.CaptureCallback() {

        @Override
        public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                       @NonNull CaptureRequest request,
                                       @NonNull TotalCaptureResult result) {

            // your picture has been taken
    };