iOSデバイスにトーチライトがあるかどうかを判断するにはどうすればよいですか?
-
29-10-2019 - |
質問
私のアプリケーションには、トーチライトのオプションがあります。 Howevver、iPhone 4とiPhone 4のみがトーチライトを持っています。他のデバイスにはトーチライトがありません。現在のデバイスモデルを見つけるにはどうすればよいですか?私を助けてください。前もって感謝します。
解決
機能が存在するかどうかの指標としてデバイスモデルを使用しないでください。代わりに、機能が存在するかどうかを正確に示すAPIを使用します。
あなたの場合、あなたは使用したいです AVCaptureDevice
's -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クラス参照
他のヒント
コードが少なく、上記のコードよりも少ないメモリを使用できます。
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
BOOL hasTorch = NO;
for (AVCaptureDevice *device in devices) {
if ([device hasTorch]) {
hasTorch = YES;
break;
}
}
Hastorchには正しい値が含まれます
このコードは、デバイスが懐中電灯をオンにする機能を提供します。ただし、懐中電灯がオンまたはオフであるかどうかを検出し、反対を実行します。
- (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];
}
}
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)
}
devicesWithMediaType:
今では非推奨になっています。
Swift4:
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back)
for device in discoverySession.devices {
if device.hasTorch {
return true
}
}
return false
Swift 4
func deviceHasTorch() -> Bool {
return AVCaptureDevice.default(for: AVMediaType.video)?.hasTorch == true
}
所属していません StackOverflow