web-dev-qa-db-ja.com

iOS 4.2より前の特定のアプリで位置情報サービスが有効になっているかどうかを確認する方法は?

ユーザーがmuアプリの場所を許可したかどうかを確認するにはどうすればよいですか?通常、authorizationStatusクラスのCLLocationManagerメソッドを使用しますが、iOS 4.2以降でのみ使用できます。 SDK 4.2を使用しながらこれを何らかの方法で達成することは可能ですか?そのため、iOSの古いバージョンのデバイスでアプリを実行できますか、またはSDKをダウングレードする必要がありますか?同じ行に沿って、iOS 4.0より前のlocationServicesEnabledメソッドの同様の代替手段が必要です。

36
pajevic

-startUpdatingLocationを呼び出したときに、ロケーションサービスがユーザーによって拒否された場合、ロケーションマネージャーのデリゲートは、kCLErrorDeniedエラーコードと共に-locationManager:didFailWithError:の呼び出しを受け取ります。これは、iOSのすべてのバージョンで機能します。

60
Martin Gordon

以下のコードで2つの手法を組み合わせました

    MKUserLocation *userLocation = map.userLocation;
    BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
    BOOL locationAvailable = userLocation.location!=nil;

    if (locationAllowed==NO) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                                                        message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    } else {
        if (locationAvailable==NO) 
            [self.map.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
    }
37
EasyCoder

うーん.. authorizationStatuslocationServicesEnabledを使用するとは思わなかった。私がしたことは次のとおりでした:

MKUserLocation *userLocation = mapView.userLocation;

if (!userLocation.location) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                                                    message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    return;
}

チェックするより良い方法があることを嬉しく思いますが、アプリがGPSの使用を許可されているかどうかを検出する方法に問題はありませんでした。

お役に立てれば!

7
donkim