iOS:iPhone 11 Pro 上的手电筒级别
Posted
技术标签:
【中文标题】iOS:iPhone 11 Pro 上的手电筒级别【英文标题】:iOS: Torch level on iPhone 11 Pro 【发布时间】:2020-05-28 12:35:37 【问题描述】:我正在使用AVCaptureDevice.setTorchModeOn(level)
的方法来打开手电筒的可变亮度。
在我的旧 iPhone SE 上,它运行良好 — 当我将 level
从 0
更改为 1
时,我可以清楚地看到 4 个不同的亮度级别。
但在 iPhone 11 Pro 上,手电筒只有在级别为1.0
时才会亮起!如果 远离 最大亮度(与控制中心的手电筒相比),它的亮度。
我尝试使用maxAvailableTorchLevel
常量,但结果与使用1.0
相同。
还尝试了超过1.0
的值——这会导致异常(如预期的那样)。
有人也有这个问题吗?也许有一些解决方法?
【问题讨论】:
这有什么更新吗?我收到有关此问题的报告,因此我正处于紧急购买 iPhone 11 Pro 的边缘:/ 不幸的是还没有。也许苹果会在一些更新中修复它……你知道它是只在 iPhone 11 Pro 上还是在所有新手机上? 我还不确定 iPhone 11 是否受到影响。我只收到过 iPhone 11 pro 用户的投诉。我尝试了一些盲目的修复,处理更多的异常等,但我不知道它是否有帮助,因为我还没有设备。如果您有实际设备,您可以在此处查看 1.81 版,看看是否有帮助?我有用户告诉我它在第一次启动时有效,但在亮度变化时失败并变暗,所以也许有一个解决方法。 i.smte.ch/ledflashfree developer.apple.com/documentation/avfoundation/avcapturedevice/… 在设置手电筒之前,你会调用 lockForConfiguration() 和 unlockForConfiguration() 吗? @antonioyaphiar,我当然愿意! 【参考方案1】:我记得在 ios 3.x 时代,我们没有简单的 LED API。我们必须开始一个完整的视频捕获会话。事实证明,对于 iPhone 11,这似乎是唯一的解决方案。我很想听听其他不需要这个的人。
这是我经过测试的解决方法。我在这里使用的是 Objective C,而不是 Swift,因为这是我从 2009 年开始在这个旧应用程序中使用的!您可以轻松找到 Swift 代码来开始视频捕获(忽略输出,它应该可以正常工作。
AVCaptureSession* session = [[AVCaptureSession alloc] init];
AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];
if ([session canAddInput:deviceInput])
[session addInput:deviceInput];
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CALayer *rootLayer = self.view.layer;
[rootLayer setMasksToBounds:YES];
CGRect frame = self.view.frame;
[previewLayer setFrame:frame];
[rootLayer insertSublayer:previewLayer atIndex:0];
//This is where you'd save the video with AVCaptureVideoDataOutput but of course we don't.
[session startRunning];
在此之后,您只需照常启动 LED:
NSError *error = nil;
if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];
这会在我的 iPhone 11 Pro 上获得最大亮度。我现在正在寻找相同的解决方案,而不必使用视频捕获(显然使用电池并且需要用户可能不喜欢的权限。需要好好解释一下)。
【讨论】:
这是 iPhone 11 Pro API 中的一个错误。我遇到了同样的问题并使用了相同的解决方法。但是,这是一个回归错误,应该由 Apple 修复。请尽快提交BUG报告。我已经这样做了……我们报告的错误越多,修复的可能性就越大。【参考方案2】:我刚刚在 iOS 14 beta 6 上的 iPhone 11 Pro 上检查了AVCaptureDevice.setTorchModeOn(level)
,它闪闪发光!
在控制中心里好像可以看到4个以上的亮度等级,最高等级真的很亮。
只有两个 LED 的顶部在工作(与控制中心中的手电筒相同)。
【讨论】:
【参考方案3】:根据maxAvailableTorchLevel的文档
这个常数总是代表最大可用的火炬等级, 与当前支持的实际最大值无关 设备。
如果这个常数总是代表最大可用的手电筒级别,我们不仅提取不同的设备具有不同的最大可用级别,而且您提到的设备不能高于 1.0。
现在最好的办法就是联系Apple's developer support。
【讨论】:
以上是关于iOS:iPhone 11 Pro 上的手电筒级别的主要内容,如果未能解决你的问题,请参考以下文章
iOS 14中出现屏幕刷新率选项:iPhone 12 Pro上120Hz稳了?