Nano Hash - криптовалюты, майнинг, программирование

Как определить, доступен ли cameraDevice?

В моем текущем приложении я разрешил пользователю отправлять изображение в онлайн-сервис изображений. Я разрешаю пользователю выбирать либо из своего фотоальбома, либо сделать снимок с помощью камеры.

Однако у меня есть проблема. Если на используемом устройстве нет камеры, а пользователь делает снимок, приложение аварийно завершает работу. Мне нужно иметь возможность определить, может ли устройство использовать cameraDevice.

Ниже приведен мой текущий код для представления UIActionSheet, который позволяет пользователю выбирать различные параметры.

#pragma mark -
#pragma mark UIImagePickerController
- (IBAction)ImagePicker {
UIActionSheet *sheet = [[UIActionSheet alloc] 
                        initWithTitle:@"" delegate:self 
                        cancelButtonTitle:@"Cancel" 
                        destructiveButtonTitle:nil 
                        otherButtonTitles:@"Choose An Existing Photo", @"Take A Photo", nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
[sheet showInView:self.view];
[sheet release];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 0) {
    //Okay the UIImagePickerControllerSourceTypeSavedPhotosAlbum displays the 
    NSLog(@"Album");
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentModalViewController:picker animated:YES];
    [picker release];

} else if (buttonIndex == 1) {
    NSLog(@"Camera");
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}
}

Заранее спасибо!


Ответы:


1

Что-то вроде этого тоже работает:

NSString* b1 = @"Get from album";
NSString* b2 = nil;

BOOL cameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

if ( cameraAvailable ) {
     b2 = @"Take a photo";   
}

UIActionSheet * sheet = [[UIActionSheet alloc] initWithTitle: alertTitle
                                                    delegate: self
                                           cancelButtonTitle: @"Cancel"
                                      destructiveButtonTitle: nil
                                           otherButtonTitles: b1, b2, nil];         
[sheet showInView: self.view];
[sheet release];
05.04.2012

2

Не забуду, мне пришлось добавить теги и новое свойство, UIActionSheet, называемое листом. Следующий код показывает, как я заставил все работать абсолютно без проблем.

#pragma mark -
#pragma mark UIImagePickerController
- (IBAction)ImagePicker {

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
sheet = [[UIActionSheet alloc] 
                        initWithTitle:@"" delegate:self 
                        cancelButtonTitle:@"Cancel" 
                        destructiveButtonTitle:nil 
                        otherButtonTitles:@"Choose An Existing Photo", nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
[sheet showInView:self.view];
sheet.tag = 0;
[sheet release];
}

else {
    sheet = [[UIActionSheet alloc] 
                            initWithTitle:@"" delegate:self 
                            cancelButtonTitle:@"Cancel" 
                            destructiveButtonTitle:nil 
                            otherButtonTitles:@"Choose An Existing Photo", @"Take A Photo", nil];
    sheet.actionSheetStyle = UIActionSheetStyleDefault;
    [sheet showInView:self.view];
    sheet.tag = 1;
    [sheet release];
}

}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

switch (sheet.tag) {
    case 0:
        if (buttonIndex == 0) {
            //Okay the UIImagePickerControllerSourceTypeSavedPhotosAlbum displays the 
            NSLog(@"Album");
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self;
            picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
            [self presentModalViewController:picker animated:YES];
            [picker release];

        }
        break;
    case 1:
        if (buttonIndex == 0) {
            //Okay the UIImagePickerControllerSourceTypeSavedPhotosAlbum displays the 
            NSLog(@"Album");
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self;
            picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
            [self presentModalViewController:picker animated:YES];
            [picker release];

        } else if (buttonIndex == 1) {
            NSLog(@"Camera");
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self;
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            [self presentModalViewController:picker animated:YES];
            [picker release];
        }
        break;
}
}
14.10.2010

3

У меня есть лучшее решение; название кнопки заказа и четкий код.

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                                         delegate:self
                                                cancelButtonTitle:nil
                                           destructiveButtonTitle:nil                                                              
                                                otherButtonTitles:nil];
BOOL isCameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
if (isCameraAvailable) {
    [actionSheet addButtonWithTitle: NSLocalizedString(@"Take New Photo", @"")];
}
[actionSheet addButtonWithTitle: NSLocalizedString(@"Choose from Library", @"")];
[actionSheet addButtonWithTitle: NSLocalizedString(@"Cancel", @"")];
actionSheet.cancelButtonIndex = actionSheet.numberOfButtons -1;
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

[actionSheet showInView: self.view];

Надеюсь, мой ответ поможет решить вашу проблему.

03.09.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..