嗨,我正在使用一个基于位置的应用程序,并希望在后台使用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];
}
}
这是正常行为
苹果的沙箱将不允许你在应用程序处于后台时保持flash打开。除非我们谈论的是一个越狱的应用程序,否则没有解决办法。
苹果对其系统的api使用非常严格。尤其是当涉及到:
-用户隐私
-电池寿命
-用户体验
在手电筒的例子中,最后两项是相关的。苹果不会让一个应用程序在不处于前台的情况下耗尽电池,iOS用户已经习惯了手电筒、摄像头、麦克风……在进入后台时立即禁用(在某些背景模式下麦克风例外)。
回答你最初帖子的评论,iOS控制着你的硬件。因此,由于苹果决定不希望在用户关闭应用程序时灯一直亮着,iOS只会在你的应用程序进入后台时关闭闪光灯。你的应用没有权限阻止它。