2015-08-21 54 views
8

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

这会很好,如果有人解释苹果沙箱杀死手电筒时,应用程序在后台 –

+1

我编辑我的答案来解释一点。 –

+1

有帮助吗? –

回答

11

这是一个正常的行为。
当您的应用在后台时,苹果的沙盒不会让您保持闪光。
除非我们正在讨论越狱应用程序,否则没有解决方法。

编辑:
苹果对系统的API使用非常严格。尤其是当它涉及到:
- 用户隐私
- 电池寿命
- 用户体验

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

要回答您的初始文章的评论,iOS控制您的硬件。因此,由于苹果决定在用户​​关闭应用程序时不希望灯光亮起,所以iOS会在应用程序进入后台时关闭闪光灯。你的应用没有权限阻止它。