3

Я пишу демона, подобного Chris Alvares daemon. Я хочу, чтобы местоположение divice было в фоновом режиме без разрешения пользователя. Если для параметра Location Services в настройках установлено значение ON, тогда у меня нет проблем с получением местоположения. Для этого я добавляю к своим исполняемым правам com.apple.locationd.preauthorized ключ с логическим значением, установленным в true. Проблема в том, что выключен Location Services. В этом случае, когда я хочу получить местоположение устройства, появляется сообщение UIAlertView, указывающее пользователю, что службы определения местоположения отключены. Есть в основном 2 пути, но я не знаю, насколько они выполнимы. Во-первых, чтобы программно включить/отключить настройки служб местоположения в настройках. Во-вторых, получить местоположение, используя другой код без необходимости Locations Услуг установить ONПолучите местоположение iPhone в iOS без предпочтений. Настройки местоположения установлены на ON


Обновление 01:

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

iPhone locationd[44] <Error>: Entitlement com.apple.locationd.authorizeapplications required to use _CLDaemonSetLocationServicesEnabled 
iPhone myDaemon[3443] <Error>: CoreLocation: CLInternalSetLocationServicesEnabled failed 

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

<key>com.apple.locationd.authorizeapplications</key> 
<true/> 
<key>com.apple.locationd.defaults_access</key> 
<true/> 
<key>com.apple.locationd.effective_bundle</key> 
<true/> 
<key>com.apple.locationd.status</key> 
<true/> 

ответ

1

Вот пример из FlipSwitch Location Switch

объявить его в заголовке

@interface CLLocationManager 
+ (id)sharedManager; 
+ (BOOL)locationServicesEnabled; 
+ (void)setLocationServicesEnabled:(BOOL)enabled; 
@end 

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

if([[[objc_getClass("CLLocationManager") sharedManager] locationServicesEnabled] { 
    // Enabled 
} else { 
    // Disabled 
} 

и включить/отключить местоположение

[objc_getClass("CLLocationManager") setLocationServicesEnabled:YES]; 
[objc_getClass("CLLocationManager") setLocationServicesEnabled:NO]; 

и не забудьте импортировать CoreLocation Framework;) и

#import <objc/runtime.h> 

EDIT Проверочный код выше

Good Luck

+0

Спасибо. Я обновил вопрос :) – user3586942

+0

проверить мои правые коды: D – iMokhles

+0

Спасибо. 'setLocationServicesEnabled' отлично работает, но я не могу получить текущее значение из' locationServicesEnabled'. Он всегда возвращает истинное значение. У меня есть вопрос. 'locationServicesEnabled' - метод класса, поэтому почему вы использовали' sharedManager' для его вызова? – user3586942