2016-10-07 4 views
1

Как я могу запросить разрешения на местоположение, камеру, bluetooth и т. Д. Без инициализации соответствующих экземпляров объектов?Как запросить разрешение до инициализации фактического объекта?

Я хочу попросить разрешения/разрешения во время работы приложения, после чего я хотел бы инициализировать CLLocationManager и т. Д.

Я попытался найти его, но не нашел ничего подходящего. Действительно ли это возможно?

+0

Почему вы не хотите делать инициализацию менеджеров ?. Могли бы, пожалуйста, добавить более подробную информацию. –

+0

Я хочу инициализировать их в разных viewController – DCDC

+0

Но вам нужно, чтобы менеджеры запрашивали разрешение пользователя. без экземпляра менеджера вы не можете запрашивать разрешения. –

ответ

2

Для разрешения доступа, как расположение, нам нужен экземпляр менеджера, чтобы показать строку доступа местоположения (см: http://nshipster.com/core-location-in-ios-8/). Эти экземпляры могут использоваться только для запроса доступа (если вы хотите, чтобы они запрашивали только доступ), а в будущем, если вы хотите получить доступ к ресурсу или данным, мы можем снова использовать эти экземпляры менеджера.

Для примера:

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

CLLocationManager().requestAlwaysAuthorization() //Requesting always permission 

И если вы хотите местоположение пользователя доступа в другом окне вы можете получить доступ к нему, как:

locationManager.startUpdatingLocation() // use delegate methods to handle the values. 

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

Вот статья о лучшем способе спросить разрешения местоположения (то же самое может быть применена для других типов запросов разрешений) https://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/

+0

Отличное дополнение статьи Techcrunch, объясняющей соображения UX для этого процесса. Если OP следует за этим советом, эта проблема решается сама, так как запрашивающие разрешения появятся позже и в контексте в то время, когда эти объекты будут инициализированы в любом случае. – mc01

+0

Yea mc01 вы абсолютно правы :) –

+0

отлично! Еще одно редактирование, пожалуйста, не могли бы вы предоставить код, чтобы сделать то же самое с менеджером bluetooth? – DCDC

0

Для каждого действия сделать подобный подход

let status = PHPhotoLibrary.authorizationStatus() 
switch status { 
case .authorized: 

case .denied, .restricted : 

//handle denied status 
case .notDetermined: 
    // ask for permissions 
    PHPhotoLibrary.requestAuthorization() { (status) -> Void in 
     switch status { 
     case .authorized: 

     // as above 
     case .denied, .restricted: 

     // as above 
     case .notDetermined: break 
      // won't happen but still 
     } 
    } 
} 
Смежные вопросы