2013-06-21 8 views
6

ケース:現在の場所では、ユーザーがアプリのインストール時に「許可しない」を選択したので、ユーザーの場所を再度尋ねて、現在の場所??iPhoneの現在位置の許可をもう一度尋ねよう

私はstackoverflowの上でいくつかの記事を見たが、古いありますが、解決策は、新しいSDKまたは誰かに呼び出すために今そこにある方法を見つけ、

ポストは呼ば: はCLLocation ask again for permission

+2

へのリダイレクトで許可/起動を要求するメッセージが表示されますアプリがインストールされている – adali

答えて

8

残念ながら、あなたはそれを行うことはできません。あなたができることの1つは、ユーザーにロケーション設定の変更を促すことです。

if (![CLLocationManager locationServicesEnabled]) 
{ 
    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]; 
} 
+1

私はすでにこれをしましたが、クライアントは知っている、彼らが心に持っているすべてを欲しい: –

+0

nice :)状況を伝える必要があります。クライアントにとって利点です。 – manujmv

0

私はそこにはないと思います場所の許可をもう一度求める方法です。しかし、実際にユーザーの場所が必要な場合は、アラートを表示して設定から有効にするように指示することができます。

5

受け入れられた回答は完全に真実ではないようです。 [CLLocationManager locationServicesEnabled]は、ドキュメントに記載されているように、ロケーションサービスが有効かどうかを確認します。

ロケーションサービスがデバイスで有効になっているかどうかを示すブール値を返します。 一般的なロケーションサービススイッチを切り替えることで、設定アプリケーションからロケーションサービスを有効または無効にすることができます。 現在のデバイスでロケーションサービスを有効にしているかどうかを判断するために、ロケーション更新を開始する前に、このメソッドの戻り値を確認する必要があります。ロケーションサービスは、ユーザーがアプリケーションでロケーション関連の情報を初めて使用しようとしたときにプロンプ​​トを表示しますが、その後の試行を促すことはありません。ユーザーがロケーションサービスの使用を拒否し、とにかくロケーション更新を開始しようとすると、ロケーションマネージャーはその代理人にエラーを報告します。

ユーザーが自分の場所を使用する許可を与えられているかどうかを確認したい場合は、[CLLocationManager authorizationStatus]にチェックする必要があります。あなたのアプリのステータスがkCLAuthorizationStatusDeniedの場合は、許可を求められたときにユーザーがあなたのアプリを明示的に拒否したことを意味します。これを使用して、それに応じてユーザーに知らせることができます。

5

ios8で、appleは、デバイスの「設定」ビューの場所であるUIApplicationOpenSettingsURLString定数を導入しました。あなたが設定にユーザーを指示する(迅速に)、以下をコーディングすることができます

ビュー: (これはMonoTouchでC#であるだけに簡単に翻訳可能:

switch CLLocationManager.authorizationStatus() { 
    case .AuthorizedWhenInUse, .Restricted, .Denied: 
     let alertController = UIAlertController(
      title: "Background Location Access Disabled", 
      message: "In order to be notified, please open this app's settings and set location access to 'Always'.", 
      preferredStyle: .Alert) 

     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) 
     alertController.addAction(cancelAction) 

     let openAction = UIAlertAction(title: "Open Settings", style: .Default) { (action) in 
      if let url = NSURL(string:UIApplicationOpenSettingsURLString) { 
       UIApplication.sharedApplication().openURL(url) 
      } 
     } 
     alertController.addAction(openAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 
} 
+0

Open Settingsアクションを追加する前にSystemVersionを確認する必要はありませんか? –

0

は、これは私が以前の回答を考慮したものですSwiftまたはObj-C)

以下は、許可を求められたら、場所の更新に進みます。それ以外の場合は、次回ユーザーが来るとき。位置情報サービスが無効になっているか、拒否された場合には、ユーザーが「許可」または「拒否」を選択した場合、一度だけあたりが変更まだ道ません設定

//Location Manager (foreground) 
     CLLocationManager locMgr = new CLLocationManager(); 
     locMgr.PausesLocationUpdatesAutomatically = false; 

     if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
     { 
      locMgr.RequestWhenInUseAuthorization(); 
     } 

     if (CLLocationManager.LocationServicesEnabled && CLLocationManager.Status == CLAuthorizationStatus.AuthorizedWhenInUse) 
     { 
      //set the desired accuracy, in meters 
      locMgr.DesiredAccuracy = 150; 
      locMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => 
      { 
       Console.WriteLine(e.Locations); 
      }; 

      locMgr.StartUpdatingLocation(); 
     } 
     else if (!CLLocationManager.LocationServicesEnabled || CLLocationManager.Status == CLAuthorizationStatus.Denied) 
     { 
      var alert = UIAlertController.Create(NSBundle.MainBundle.LocalizedString("Location access", "Location access"), NSBundle.MainBundle.LocalizedString("Please check location", "To show your position on the map, you have to enable location services and authorize the app"), UIAlertControllerStyle.Alert); 

      alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Cancel, null)); 

      if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
      { 
       alert.AddAction(UIAlertAction.Create(NSBundle.MainBundle.LocalizedString("Go to settings", "Go to settings"), UIAlertActionStyle.Default, delegate 
       { 

        var url = new NSUrl(UIApplication.OpenSettingsUrlString); 
        UIApplication.SharedApplication.OpenUrl(url); 

       })); 
      } 

      PresentViewController(alert, true, null); 
     } 
関連する問題