应用程序在后台时,iPhone 手电筒不工作

问题描述 投票:0回答:1

嗨,我正在使用基于位置的应用程序,并且想在后台使用 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];
    }
}
objective-c ios8 background camera flashlight
1个回答
12
投票

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

编辑:
Apple对其系统API的使用非常严格。尤其是当涉及到:

  • 用户隐私
  • 电池寿命
  • 用户体验

就手电筒而言,最后两项是相关的。 Apple 不会让应用程序不在前台时耗尽电池,iOS 用户已经习惯了手电筒、摄像头和麦克风在进入后台时会立即禁用(某些后台模式下的麦克风除外) .

回答您最初帖子中的评论,iOS 控制您的硬件。因此,由于 Apple 决定不希望用户关闭应用程序时灯一直亮着,因此当您的应用程序进入后台时,iOS 只会关闭闪光灯。您的应用程序无权阻止它。

© www.soinside.com 2019 - 2024. All rights reserved.