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

时间:2015-08-21 09:03:39

标签: objective-c ios8 background camera flashlight

您好我正在使用基于位置的应用程序,并希望在后台使用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];
    }
}

1 个答案:

答案 0 :(得分:12)

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

修改
Apple对其系统的API使用非常严格。特别是当谈到:
  - 用户隐私
  - 电池寿命
  - 用户体验

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

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