应用程序处于后台时,Iphone手电筒无法正常工作

Sur*_*mas 8 camera background objective-c flashlight ios8

嗨我正在使用基于位置的应用程序,并希望在后台使用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];
    }
}
Run Code Online (Sandbox Code Playgroud)

Que*_*yot 12

这是正常行为.
当您的应用在后台时,Apple的沙盒将不允许您保持闪光灯开启.
除非我们谈论越狱应用程序,否则没有解决方法.

编辑:
Apple对其系统的API使用非常严格.特别是在以下方面:
- 用户隐私
- 电池寿命
- 用户体验

在手电筒的情况下,最后两个项目是相关的.Apple不会让应用程序在不在前台时耗尽电池,并且iOS用户习惯于手电筒,相机,麦克风......在前往后台时立即被禁用(某些后台模式下麦克风除外)例).

要回答关于您的初始帖子的评论,iOS会控制您的硬件.因此,由于Apple决定他们不希望灯光在用户关闭应用程序时保持亮起,因此iOS会在您的应用程序进入后台时关闭闪光灯.您的应用无权阻止它.