嗨,我正在使用基于位置的应用程序,并且想在后台使用 iPhone 相机手电筒。不幸的是,手电筒只能在前台工作,即使代码正在执行,它也会自动关闭后台的闪光灯。
我使用的代码仅在前台运行
#import <AVFoundation/AVFoundation.h>
//flashcode
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch] && [device hasFlash]){
[device lockForConfiguration:nil];
if (device.torchMode == AVCaptureTorchModeOff)
{
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
//torchIsOn = YES;
}
else
{
[device setTorchMode:AVCaptureTorchModeOff];
[device setFlashMode:AVCaptureFlashModeOff];
// torchIsOn = NO;
}
[device unlockForConfiguration];
}
}
这是正常行为。
Apple 的沙箱不允许您在应用程序处于后台时保持闪光灯开启。
除非我们谈论的是越狱的应用程序,否则没有解决方法。
编辑:
Apple对其系统API的使用非常严格。尤其是当涉及到:
就手电筒而言,最后两项是相关的。 Apple 不会让应用程序不在前台时耗尽电池,iOS 用户已经习惯了手电筒、摄像头和麦克风在进入后台时会立即禁用(某些后台模式下的麦克风除外) .
回答您最初帖子中的评论,iOS 控制您的硬件。因此,由于 Apple 决定不希望用户关闭应用程序时灯一直亮着,因此当您的应用程序进入后台时,iOS 只会关闭闪光灯。您的应用程序无权阻止它。