Определить разрешение медиа-библиотеки IOS

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

Вот мой код доступа к списку песен.

MPMediaQuery *everything = [MPMediaQuery songsQuery];
NSArray *songArray = [everything items];

Смотрите скриншот ниже, где пользователь может изменять права доступа к библиотеке мультимедиа.

введите описание изображения здесь

3 ответа

Решение
-(void) checkMediaLibraryPermissions {
    [MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status){
        switch (status) {
            case MPMediaLibraryAuthorizationStatusNotDetermined: {
                // not determined
                break;
            }
            case MPMediaLibraryAuthorizationStatusRestricted: {
                // restricted
                break;
            }
            case MPMediaLibraryAuthorizationStatusDenied: {
                // denied
                break;
            }
            case MPMediaLibraryAuthorizationStatusAuthorized: {
                // authorized
                break;
            }
            default: {
                break;
            }
        }
    }];
}

Временно я решил свою проблему, проверив songArray объект в коде ниже

MPMediaQuery *everything = [MPMediaQuery songsQuery]; 
NSArray *songArray = [everything items];

Если пользователь отказал в разрешении, то songArray объект всегда равен нулю, но если пользователь разрешает доступ к Media Library затем songArray Объект имеет массив песен. Даже если на устройстве не будет песен, но пользователь разрешит доступ Media Library тогда будет массив с 0 отсчетом.

Swift 4 проверка доступа. Простое решение заключается в следующем, и вы можете изменить другие альтернативы, однако в моем случае это был доступ или ничего.

private func checkPermissionForMusic() -> Bool {
    switch MPMediaLibrary.authorizationStatus() {
    case .authorized:
        return true
    default:
        return false
    }
}

Осторожно при использовании вышеуказанных решений - они работают как оператор блока и не возвращают значение (return true или же return "authorised") в той же теме; результат обрабатывается в фоновом потоке. Если вы решите использовать приведенные выше предложения, используйте обработчик (вызов другой функции) для обработки ожидаемого результата. Это решение, с другой стороны, немедленно сообщает вам, есть ли у вас доступ или нет. Ожидание не требуется.

Более подробная информация доступна в Apple Docs

Другие вопросы по тегам