Pregunta

En mi aplicación tengo la opción de una luz de antorcha. Sin embargo, solo el iPhone 4 y el iPhone 4s tienen luces de antorcha. Otros dispositivos no tienen la luz de la antorcha. ¿Cómo puedo encontrar el modelo de dispositivo actual? Por favor, ayúdame. Gracias por adelantado.

¿Fue útil?

Solución

No debe usar el modelo de dispositivo como un indicador de si una característica está presente. En su lugar, use la API que le indica exactamente si la función está presente.

En tu caso, quieres usar AVCaptureDevice's -hasTorch propiedad:

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);

Más información hay disponible en el Guía de programación de la Fundación AV y el Referencia de clase AvCapturedEvice

Otros consejos

Puede tener menos código y usar menos memoria que el código anterior:

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
BOOL hasTorch = NO;

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

Hastorch ahora contiene el valor correcto

Este código le dará a su dispositivo la capacidad de encender la linterna. Pero también detectará si la linterna está encendida o apagada y hará lo contrario.

- (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: ahora está en desuso.

Swift 4:

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top