iOS LocationService threading issues resolved.
This commit is contained in:
parent
a43086fe2c
commit
32c85b327f
@ -35,13 +35,12 @@ namespace eShopOnContainers.iOS.Services
|
|||||||
|
|
||||||
async Task<bool> CheckPermissions(Permission permission)
|
async Task<bool> CheckPermissions(Permission permission)
|
||||||
{
|
{
|
||||||
IPermissionsService permissionsService = new PermissionsService();
|
var status = await PermissionsService.Current.CheckPermissionStatusAsync(permission);
|
||||||
var status = await permissionsService.CheckPermissionStatusAsync(permission);
|
|
||||||
if (status != PermissionStatus.Granted)
|
if (status != PermissionStatus.Granted)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Currently do not have Location permissions, requesting permissions");
|
Console.WriteLine("Currently do not have Location permissions, requesting permissions");
|
||||||
|
|
||||||
var request = await permissionsService.RequestPermissionsAsync(permission);
|
var request = await PermissionsService.Current.RequestPermissionsAsync(permission);
|
||||||
if (request[permission] != PermissionStatus.Granted)
|
if (request[permission] != PermissionStatus.Granted)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Location permission denied, can not get positions async.");
|
Console.WriteLine("Location permission denied, can not get positions async.");
|
||||||
|
@ -11,6 +11,22 @@ namespace eShopOnContainers.iOS.Services
|
|||||||
{
|
{
|
||||||
public class PermissionsService : IPermissionsService
|
public class PermissionsService : IPermissionsService
|
||||||
{
|
{
|
||||||
|
CLLocationManager _locationManager;
|
||||||
|
|
||||||
|
static Lazy<IPermissionsService> implementation = new Lazy<IPermissionsService>(CreatePermissions, System.Threading.LazyThreadSafetyMode.PublicationOnly);
|
||||||
|
static IPermissionsService CreatePermissions()
|
||||||
|
{
|
||||||
|
return new PermissionsService();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IPermissionsService Current
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return implementation.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region Internal Implementation
|
#region Internal Implementation
|
||||||
|
|
||||||
PermissionStatus GetLocationPermissionStatus(Permission permission)
|
PermissionStatus GetLocationPermissionStatus(Permission permission)
|
||||||
@ -64,22 +80,22 @@ namespace eShopOnContainers.iOS.Services
|
|||||||
|
|
||||||
EventHandler<CLAuthorizationChangedEventArgs> authCallback = null;
|
EventHandler<CLAuthorizationChangedEventArgs> authCallback = null;
|
||||||
var tcs = new TaskCompletionSource<PermissionStatus>();
|
var tcs = new TaskCompletionSource<PermissionStatus>();
|
||||||
var locationManager = new CLLocationManager();
|
_locationManager = new CLLocationManager();
|
||||||
|
|
||||||
authCallback = (sender, e) =>
|
authCallback = (sender, e) =>
|
||||||
{
|
{
|
||||||
if (e.Status == CLAuthorizationStatus.NotDetermined)
|
if (e.Status == CLAuthorizationStatus.NotDetermined)
|
||||||
return;
|
return;
|
||||||
locationManager.AuthorizationChanged -= authCallback;
|
_locationManager.AuthorizationChanged -= authCallback;
|
||||||
tcs.TrySetResult(GetLocationPermissionStatus(permission));
|
tcs.TrySetResult(GetLocationPermissionStatus(permission));
|
||||||
};
|
};
|
||||||
locationManager.AuthorizationChanged += authCallback;
|
_locationManager.AuthorizationChanged += authCallback;
|
||||||
|
|
||||||
var info = NSBundle.MainBundle.InfoDictionary;
|
var info = NSBundle.MainBundle.InfoDictionary;
|
||||||
if (permission == Permission.LocationWhenInUse)
|
if (permission == Permission.LocationWhenInUse)
|
||||||
{
|
{
|
||||||
if (info.ContainsKey(new NSString("NSLocationWhenInUseUsageDescription")))
|
if (info.ContainsKey(new NSString("NSLocationWhenInUseUsageDescription")))
|
||||||
locationManager.RequestWhenInUseAuthorization();
|
_locationManager.RequestWhenInUseAuthorization();
|
||||||
else
|
else
|
||||||
throw new UnauthorizedAccessException("On iOS 8.0 and higher you must set either NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in your Info.plist file to enable Authorization Requests for Location updates.");
|
throw new UnauthorizedAccessException("On iOS 8.0 and higher you must set either NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in your Info.plist file to enable Authorization Requests for Location updates.");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user