Как я могу определить, имеет ли мое устройство iOS фонарь? - PullRequest
3 голосов
/ 07 декабря 2011

В моем приложении у меня есть опция для фонарика. Однако, только iPhone 4 и iPhone 4S имеют фонари. Другие устройства не имеют фонарика. Как я могу найти текущую модель устройства? Пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 6 ]

4 голосов
/ 07 декабря 2011

Не следует использовать модель устройства в качестве индикатора наличия функции.Вместо этого используйте 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

3 голосов
/ 12 июня 2014

Вы можете иметь меньше кода и использовать меньше памяти, чем код выше:

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

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

hasTorch теперь будет содержать правильное значение

1 голос
/ 02 июля 2015

Этот код даст вашему устройству возможность включать фонарик. Но он также обнаружит, включен или выключен фонарик, и сделает наоборот.

- (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 голосов
/ 10 декабря 2018

Свифт 4

func deviceHasTorch() -> Bool {
    return AVCaptureDevice.default(for: AVMediaType.video)?.hasTorch == true
}
0 голосов
/ 24 апреля 2018

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 голосов
/ 03 ноября 2017

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...