我试图在Galaxy S6上用手电筒拍照,没有手电筒就可以了,在其他设备上使用手电筒 - 没关系。手电筒和Galaxy S6 - 什么都没有。 我使用https://github.com/googlesamples/android-Camera2Basic中的结构 这段代码中的问题:
private void captureStillPicture() {
...
CameraCaptureSession.CaptureCallback CaptureCallback
= new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session,
@NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) {
Log.d(TAG, "onCaptureCompleted inner: go next unlock focus");
unlockFocus();
}
@Override
public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) {
Log.d(TAG, "onCaptureSequenceCompleted inner: sequanceId " + sequenceId + " frame number " + frameNumber);
super.onCaptureSequenceCompleted(session, sequenceId, frameNumber);
}
@Override
public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, long timestamp, long frameNumber) {
Log.d(TAG, "onCaptureStarted inner: ");
super.onCaptureStarted(session, request, timestamp, frameNumber);
}
@Override
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult) {
Log.d(TAG, "onCaptureProgressed inner: ");
super.onCaptureProgressed(session, request, partialResult);
}
@Override
public void onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure failure) {
Log.d(TAG, "onCaptureFailed inner: ");
super.onCaptureFailed(session, request, failure);
}
@Override
public void onCaptureSequenceAborted(CameraCaptureSession session, int sequenceId) {
Log.d(TAG, "onCaptureSequenceAborted inner: ");
super.onCaptureSequenceAborted(session, sequenceId);
}
};
mCaptureSession.capture(captureBuilder.build(), CaptureCallback, mBackgroundHandler);
...
}
这是我设置闪光模式的方法
private void setCurrentFlash(CaptureRequest.Builder requestBuilder) {
if (mFlashSupported) {
if (selectFlashModePosition == 0) {
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
requestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_SINGLE);
} else {
requestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_OFF);
}
}
}
启动CaptureSession.capture
后,在其他所有设备上,onCaptureCompleted
被调用,我在ImageReader.OnImageAvailableListener.onImageAvailable
中获得了一张图片,但只有使用了Galaxy S6和手电筒 - 它没有被调用,CameraCaptureSession.CaptureCallback
的所有方法都没有被调用!到底是怎么回事?
我会再说一遍 - 它在手电筒关闭时起作用,我得到了照片。但是使用手电筒 - 它无法正常工作