2017-10-14 7 views
1

アプリケーションが読み込まれると、ユーザーには場所の許可を有効にするよう求められます。ユーザーがそのポップアップで「許可」または「許可しない」とヒットした場合にのみ、次のページに移動します。xamarin iOS:場所ユーザーが「許可」または「許可しない」をクリックしたときを見つける方法を要求します。

私はthisのようないくつかの質問を見ましたが、助けにはなりませんでした。

マイコード:

var locationManager = new CLLocationManager(); 
locationManager.AuthorizationChanged += (object sender, CLAuthorizationChangedEventArgs e) => 
{ 
    if(ee.Status == CLAuthorizationStatus.AuthorizedAlways || ee.Status ==CLAuthorizationStatus.Denied) 
    { 
     //Goto next page 
    } 
    if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
    { 
     locationManager.DesiredAccuracy = CLLocation.AccuracyBest; 
     locationManager.DistanceFilter = CLLocationDistance.FilterNone; 
     locationManager.RequestAlwaysAuthorization(); 
    } 
} 

場所ダイアログがポップアップし、状況が常にCLAuthorizationStatus.NotDetermined、ユーザーが「許可」または「許可しない」クリックしたときに検出することができないときAuthorizationChangedが求められます。

答えて

1

アプリが読み込まれると、ユーザーには位置許可の有効化が求められます。ユーザーがそのポップアップで「許可」または「許可しない」とヒットした場合にのみ、次のページに移動します。

// showTrackingMap is a class level var 
showTrackingMap = new LocationCheck((s, ev) => 
{ 
    if ((ev as LocationCheck.LocationCheckEventArgs).Allowed) 
     Console.WriteLine("Present Tracking Map ViewController"); 
    else 
     Console.WriteLine("Disable Tracking Map"); 
    showTrackingMap.Dispose(); 
}); 

LocationCheckは、ロケーション要求をカプセル化し、ユーザーが唯一のアプリケーションでは、常に受け入れるか、ロケーションプライバシ要求を拒否したらEventHandlerがトリガーされます:あなたのViewDidLoad方法で

あなたはこのような何かを行うことができます。

注:ユーザーにSettingにアクセスして、以前に拒否されていたアプリを常に拒否済み(常時/アプリ使用中)に変更するよう指示された場合は、EventHandlerも呼び出されます。

public class LocationCheck : NSObject, ICLLocationManagerDelegate 
{ 
    public class LocationCheckEventArgs : EventArgs 
    { 
     public readonly bool Allowed; 
     public LocationCheckEventArgs(bool Allowed) 
     { 
      this.Allowed = Allowed; 
     } 
    } 

    CLLocationManager locationManager; 
    EventHandler locationStatus; 

    public LocationCheck(EventHandler locationStatus) 
    { 
     this.locationStatus = locationStatus; 
     Initialize(); 
    } 

    public LocationCheck(NSObjectFlag x) : base(x) { Initialize(); } 

    public LocationCheck(IntPtr handle) : base(handle) { Initialize(); } 

    public LocationCheck(IntPtr handle, bool alloced) : base(handle, alloced) { Initialize(); } 

    public void Initialize() 
    { 
     locationManager = new CLLocationManager 
     { 
      Delegate = this 
     }; 
     locationManager.RequestAlwaysAuthorization(); 
    } 

    [Export("locationManager:didChangeAuthorizationStatus:")] 
    public void AuthorizationChanged(CLLocationManager manager, CLAuthorizationStatus status) 
    { 
     switch (status) 
     { 
      case CLAuthorizationStatus.AuthorizedAlways: 
      case CLAuthorizationStatus.AuthorizedWhenInUse: 
       locationStatus.Invoke(locationManager, new LocationCheckEventArgs(true)); 
       break; 
      case CLAuthorizationStatus.Denied: 
      case CLAuthorizationStatus.Restricted: 
       locationStatus.Invoke(locationManager, new LocationCheckEventArgs(false)); 
       break; 
     } 
    } 

    protected override void Dispose(bool disposing) 
    { 
     locationStatus = null; 
     locationManager.Delegate = null; 
     locationManager.Dispose(); 
     base.Dispose(disposing); 
    } 
} 
+0

ありがとうございます。これはまさに私が探しているものです。 – TheDeveloper

+0

@ TheDeveloper NP、喜んで助けた。 – SushiHangover

関連する問題