我想检查一下手电筒是否打开。首先我打开控制中心,然后打开手电筒。接下来,我运行我的应用程序并执行我的火炬测试。我得到 AVCaptureDevice 像这样:
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
Run Code Online (Sandbox Code Playgroud)
然后我检查设备对象的各种属性,例如:
但我总是发现手电筒已关闭。您是否需要任何权限才能读取此属性,或者也许有另一种方法来检查火炬是否已打开?
虽然这在技术上并不能解决问题,但这是用于确定火炬状态变化的 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 的控制权时让手电筒保持打开状态(如果它已经打开)。
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |