4

Chris Alvares daemonに似たデーモンを書いています。ユーザーの許可なしにバックグラウンドでデバイスの位置を取得したい。Location Services[設定] の設定が に設定されている場合、ON場所の取得に問題はありません。このためにcom.apple.locationd.preauthorized、ブール値を true に設定して、実行可能資格キーに追加しています。問題はLocation Servicesオフのときです。この場合、デバイスの位置を取得したい場合、UIAlertView がポップアップして、位置情報サービスがオフになっていることをユーザーに伝えます。基本的に2つの方法がありますが、実行可能かどうかはわかりません。まず、設定で位置情報サービスの設定をプログラムでオン/オフにします。次に、位置情報サービスを設定する必要なく、別のコードを使用して位置情報を取得しますON


更新 01:

私はiMokhlesが言ったようにやったし、うまくいくはずだと思うが、何も起こらない. 資格が原因だと思います。syslog を見たところ、ログに記録されているものが次のとおりです。

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

そのため、このキーを資格に追加しましたが、それでもこのエラーが発生しました。Preferences app entitlement を確認した後、これらの行を entitlements plist に追加しましたが、やはり何も起こりません。

<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/>
4

1 に答える 1

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 チェックコード

幸運を

于 2014-09-01T15:03:04.540 に答える