如何确定我的iOS设备是否有手电筒功能?

4

我的应用程序中有手电筒选项。然而,只有iPhone 4和iPhone 4S拥有手电筒灯。其他设备没有手电筒灯。如何找到当前设备型号?请帮我。谢谢。

6个回答

4
您不应该使用设备型号作为功能是否可用的指标。相反,应该使用能够准确告诉您功能是否可用的API。
在您的情况下,您需要使用AVCaptureDevice的-hasTorch属性:
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
NSMutableArray *torchDevices = [[NSMutableArray alloc] init];
BOOL hasTorch = NO;

for (AVCaptureDevice *device in devices) {
    if ([device hasTorch]) {
        [torchDevices addObject:device];
    }
}

hasTorch = ([torchDevices count] > 0);

更多信息可在AV Foundation编程指南AVCaptureDevice类参考中找到。


1
非常感谢Martin Gordon先生。您的答案非常完美,非常感谢。 - Yuvaraj.M

4
您可以使用比上述代码更少的代码和内存:
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
BOOL hasTorch = NO;

for (AVCaptureDevice *device in devices) {
    if ([device hasTorch]) {
        hasTorch = YES;
        break;
    }
}

hasTorch现在将包含正确的值。


3

Swift 4

var deviceHasTorch: Bool {
    return AVCaptureDevice.default(for: AVMediaType.video)?.hasTorch == true
}

这是正确的答案。如果存在,默认视频捕获设备始终附加火炬。 - Simon Tillson

1

这段代码将使您的设备具有打开手电筒的功能。但它也会检测手电筒是否已经打开或关闭,并执行相反的操作。

- (void)torchOnOff: (BOOL) onOff {

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch]) {
    [device lockForConfiguration:nil];
    if (device.torchMode == AVCaptureTorchModeOff) {
        device.torchMode = AVCaptureTorchModeOn;
        NSLog(@"Torch mode is on.");
    } else {
        device.torchMode = AVCaptureTorchModeOff;
        NSLog(@"Torch mode is off.");
    }
    [device unlockForConfiguration];
}

}


0

devicesWithMediaType:已被弃用。

Swift 4:

let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back)

for device in discoverySession.devices {
    if device.hasTorch {
        return true
    }
}

return false

0

Swift 4

if let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) {
    if (device.hasTorch) {
        // Device has torch
    } else {
        // Device does not have torch
    }
} else {
    // Device does not support video type (and so, no torch)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接