1

ロケーションマネージャーが存在しない場合は作成して開始する方法を使用しています。ユーザーが位置情報サービスを無効にしているかどうかを確認し、サービスを開始するために BOOL が指定されていない限り、それを尊重します。このメソッドは、サービスが開始されたかどうかを示すために BOOL を返します。

これは、サービスを開始してユーザーに初めてプロンプトを表示する場合に問題なく機能します。許可をタップした場合は通常どおり続行し、許可しない場合は手動で場所を入力するためのビューを表示します。

ただし、位置情報サービスの使用についてユーザーが考えを変えられるようにしたいので、GPS の使用に戻るためのボタンを用意しました。同じ関数を再度呼び出しますが、今回はユーザーの位置情報サービスの設定を無視します。これにより、ユーザーは再度許可/禁止するよう求められるはずですが、代わりに kCLDenied エラー コードがすぐに表示されます。

http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11に基づいて、別のユーザー プロンプトを期待します。即時エラーではありません。

- (BOOL)startLocationServices:(BOOL)ignorePrefs
{
//    
//    /*UNREVISEDCOMMENTS*/
//    
if (locationManager == nil)
{
    if ([CLLocationManager locationServicesEnabled] || ignorePrefs)
    {
        locationManager    =    [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
        [locationManager setDistanceFilter:10.0];
    }
    else
    {
        return NO;
    }
}
[locationManager startUpdatingLocation];
return YES;
}

(私のロケーション マネージャー デリゲートは、拒否されたエラーが受信された場合、ロケーション マネージャーを解放し、nil に設定します。)

4

1 に答える 1

0

ユーザーは別のプロンプト メッセージを受け取りません。それはまさにiPhoneが物事を処理する方法です。

また、以下を区別する必要があります。

  • ユーザーが設定アプリケーションから位置情報サービスを無効にします (このステータスは+ (BOOL)locationServicesEnabled メソッドによって返されます)
  • ユーザーが現在のアプリの位置追跡の使用を拒否しました (+ (CLAuthorizationStatus)authorizationStatusメソッドは現在のステータスを返します)

私は両方の方法をチェックし、場合によっては非アクティブ化された位置情報サービスに関するメッセージを含むアラート ビューを表示します。

于 2011-05-29T07:48:52.783 に答える