Xamarin iOS如何检查定位服务是否关闭或应用级设备位置是否关闭

时间:2019-06-19 13:15:14

标签: ios xamarin xamarin.ios

我一般对Xamarin iOS和移动开发人员是陌生的。 我有一个需要位置服务的应用程序,在我的视图控制器上,我有一个按钮,可以将用户转到该应用程序的位置设置,但是,如果主设备位置关闭,则用户将无法使用该应用程序级别执行任何操作位置设置。

我在按钮单击事件上使用此代码将用户带到设置页面。

if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
    NSString settingsString = UIApplication.OpenSettingsUrlString;
    NSUrl url = new NSUrl(settingsString);
    UIApplication.SharedApplication.OpenUrl(url);
}

我想知道是否有一种方法可以检查设备级别的位置服务是否已关闭,并将用户带到该设置页面,而不是应用程序级别的位置设置,反之亦然。

如果禁用了设备级别的位置服务,还如何将用户带到“位置设置”屏幕。我尝试了几种组合,但不确定NSUrl是什么。

3 个答案:

答案 0 :(得分:1)

欢迎使用手机和Xamarin!是的,您可以添加几个Nuget软件包来帮助您完成此操作。越来越受欢迎的是Xamarin Essentials。

正如它们在documentation中所显示的那样,只需尝试获取位置,它就会自己处理权限,如果您遇到PermissionException,则可以直接打开设置!快乐编码

答案 1 :(得分:1)

要检查设备级别的位置权限,请执行以下操作:

 bool deviceLevel = CLLocationManager.LocationServicesEnabled;

此处提供文档:determining_the_availability_of_location_services

要检查应用级别的位置权限,请执行以下操作:

public void CheckAuthorization(CLLocationManager manager, CLAuthorizationStatus status)
{

    switch (status)
    {
        case CLAuthorizationStatus.Authorized | CLAuthorizationStatus.AuthorizedAlways | CLAuthorizationStatus.AuthorizedWhenInUse:
            Console.WriteLine("Access");
            break;
        case CLAuthorizationStatus.Denied | CLAuthorizationStatus.NotDetermined | CLAuthorizationStatus.Restricted:
            Console.WriteLine("No Access");
            break;
        default:
            Console.WriteLine("No Access");
            break;
    }
}

此处提供文档:clauthorizationstatus

更新

看看其中的两个线程的答案:how-to-programmatically-open-settings-privacy-location-services-in-ios-11how-to-open-location-services-screen-from-setting-screen

那里说

  

避免在您的应用中使用“ prefs:root”或“ App-Prefs:root”,否则   应用将从应用商店中被拒绝。只需打开“设置”页面。

无法直接打开设备位置权限,这是App Store规则所不允许的。

只需使用UIApplication.OpenSettingsUrlString;即可打开设置页面。

答案 2 :(得分:1)

您可以检查用户是否在设置级别禁用了位置服务,然后检查应用程序级别:

if(!CLLocationManager.LocationServicesEnabled)
{
    Console.WriteLine("Location Services are off globally go to settings");
    // This may get your app rejected using the strings below
    if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
    {
        UIApplication.SharedApplication.OpenUrl(new NSUrl("App-Prefs:root=General"));
    }
    else
    {
        UIApplication.SharedApplication.OpenUrl(new NSUrl("prefs:root=General"));
    }
}
else if (CLLocationManager.Status == CLAuthorizationStatus.Denied ||
         CLLocationManager.Status == CLAuthorizationStatus.NotDetermined ||
         CLLocationManager.Status == CLAuthorizationStatus.Restricted)
{
    Console.WriteLine("Location Services are off just for your app, got to app settings");
    UIApplication.SharedApplication.OpenUrl(new NSUrl(UIApplication.OpenSettingsUrlString));
}

在打开系统设置或应用程序设置方面,UIApplication.OpenSettingsUrlString将根据文档进入应用程序设置:

  

UIApplicationOpenSettingsURLString   用于创建可传递给openURL:方法的URL。当您打开根据此字符串构建的URL时,系统将启动“设置”应用程序并显示该应用程序的自定义设置(如果有的话)。

您可以使用字符串:

  

prefs:root = General

或适用于iOS 10及更高版本

  

App-Prefs:root = General

但是Apple可能会拒绝您的应用,所以我认为不值得仅出于这个原因而尝试设置,而是由您自己决定。

相关问题