Come posso determinare se il mio dispositivo iOS ha una luce della torcia?
-
29-10-2019 - |
Domanda
Nella mia applicazione ho l'opzione per una luce della torcia. Tuttavia, solo iPhone 4 e iPhone 4s hanno luci di torcia. Altri dispositivi non hanno la luce della torcia. Come posso trovare il modello di dispositivo corrente? Mi aiuti per favore. Grazie in anticipo.
Soluzione
Non è necessario utilizzare il modello del dispositivo come indicatore se è presente una funzione. Invece, usa l'API che ti dice esattamente se la funzione è presente.
Nel tuo caso, vuoi usare AVCaptureDevice
'S -hasTorch
proprietà:
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);
Ulteriori informazioni sono disponibili in Guida alla programmazione della Fondazione AV e il Riferimento di classe AvcaptureEvice
Altri suggerimenti
Puoi avere meno codice e utilizzare meno memoria del codice sopra:
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
BOOL hasTorch = NO;
for (AVCaptureDevice *device in devices) {
if ([device hasTorch]) {
hasTorch = YES;
break;
}
}
Hastorch ora contiene il valore corretto
Questo codice fornirà al tuo dispositivo la possibilità di accendere la torcia. Ma rileverà anche se la torcia è attiva o spenta e fa il 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:
è ora deprecato.
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
}