以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于Android Studio的默认相机库(Camera2)在光线不足的时候不会自动开启闪光灯,而是使用了系统自带的补光灯。
如果你想要在没有闪光灯的情况下拍摄照片,你可以在你的Activity或Fragment类中添加一个自定义的方法来处理这种情况:
public class MyPhotoCapture extends AppCompatActivity {
private Camera2 camera;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
camera = getCameraInstance();
if (camera == null) {
Toast.makeText(this, "Failed to get a camera instance", Toast.LENGTH_SHORT).show();
return;
}
// ...
}
public static Camera2 getCameraInstance() {
try {
Class<?> clazz = Class.forName("com.android.camera.Camera2");
Object camera = clazz.getDeclaredMethod("getInstance").invoke(null);
return (Camera2) camera;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void takePhoto(String fileName) {
// ... 你的拍照逻辑
}
// 这里是你想在没有闪光灯的情况下拍照的地方
public void takePhotoWithoutFlash() {
takePhoto(fileName);
}
// 在调用takePhotoWithoutFlash后,你需要在主线程中触发事件
private void triggerTakePhotoEvent() {
// 在这里添加你的逻辑
}
}
然后,在MainActivity或其他需要调用takePhotoWithoutFlash()方法的地方,你可以这样调用它:
MyPhotoCapture activity = (MyPhotoCapture) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
activity.takePhotoWithoutFlash();
注意,这种方法只能保证在没有闪光灯的情况下拍照,并不能保证每次都能成功获取到图像。如果闪光灯仍然不工作,可能是因为设备本身的问题或者应用配置问题。