iOS 检查手电筒是否打开

Say*_*aki 8 ios

我想检查一下手电筒是否打开。首先我打开控制中心,然后打开手电筒。接下来,我运行我的应用程序并执行我的火炬测试。我得到 AVCaptureDevice 像这样:

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
Run Code Online (Sandbox Code Playgroud)

然后我检查设备对象的各种属性,例如:

  • 火炬等级
  • 火炬活跃
  • 火炬模式
  • 闪存激活
  • 闪光模式

但我总是发现手电筒已关闭。您是否需要任何权限才能读取此属性,或者也许有另一种方法来检查火炬是否已打开?

Ada*_*man 2

虽然这在技术上并不能解决问题,但这是用于确定火炬状态变化的 KVO 代码。也许这会有所帮助。我正在尝试解决同样的问题,但无法访问有关从控制中心打开的火炬的任何信息。似乎应该有其他方法使用 KVO 或其他方法来了解火炬当前是否处于活动状态。

static void * const torchActiveObservationContext = (void*)&torchActiveObservationContext;

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (context == torchActiveObservationContext) {
        AVCaptureDevice *thisDevice = (AVCaptureDevice*)object;
        NSLog( @"Current torch level: %f", thisDevice.torchActive);
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

-(id) init {
    if (self = [super init]) {
        AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

        [videoDevice addObserver:self forKeyPath:@"torchActive" options:NSKeyValueObservingOptionNew context:torchActiveObservationContext];

        // whatever other initialization code ...
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 torchLevel 和 torchMode 无济于事。这是一个真正的问题,因为我想在接管 AVCaptureDevice 的控制权时让手电筒保持打开状态(如果它已经打开)。