您好我正在使用基于位置的应用程序,并希望在后台使用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];
}
}
答案 0 :(得分:12)
这是正常行为。
当您的应用处于后台时,Apple的沙盒将不允许您保持闪光灯开启
除非我们谈论越狱应用程序,否则没有解决方法。
修改强>
Apple对其系统的API使用非常严格。特别是当谈到:
- 用户隐私
- 电池寿命
- 用户体验
对于手电筒,最后两项是相关的。 Apple不会让应用程序在不在前台时耗尽电池,并且iOS用户习惯于手电筒,相机,麦克风......在前往后台时立即被禁用(某些后台模式下麦克风除外)例)。
要回答关于您的初始帖子的评论,iOS会控制您的硬件。因此,由于Apple决定他们不希望灯光在用户关闭应用程序时保持亮起状态,因此iOS会在您的应用程序进入后台时关闭闪光灯。您的应用无权阻止它。