当应用程序在后台运行时,Iphone手电筒不工作



嗨,我正在使用一个基于位置的应用程序,并希望在后台使用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只会在你的应用程序进入后台时关闭闪光灯。你的应用没有权限阻止它。

最新更新