iOSデバイスにトーチライトがあるかどうかを判断するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/8418293

質問

私のアプリケーションには、トーチライトのオプションがあります。 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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top