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 上,它运行良好 — 当我将 level0 更改为 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稳了?

ios14触摸不灵敏

iPhone11pro显示电量 怎样能显示电量

Kotlin 上的 Android 手电筒

iOS 11.3 固件暗示:iPad Pro 将支持面容 ID

iOS 11.3确认可以恢复旧iPhone上的原始性能