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

Xamarin iOS如何检查位置服务是否关闭或应用程序级设备位置是否关闭,ios,xamarin,xamarin.ios,Ios,Xamarin,Xamarin.ios,一般来说,我对Xamarin iOS和移动开发都是新手。 我有一个需要位置服务的应用程序,在我的视图控制器上有一个按钮,可以将用户带到应用程序的位置设置,但是,如果主设备位置关闭,用户将无法使用应用程序级别的位置设置执行任何操作 我在我的按钮点击事件中使用此代码将用户带到设置页面 if(UIDevice.CurrentDevice.CheckSystemVersion(8,0)) { NSString settingsString=UIApplication.OpenSettingsUrlStr

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

我在我的按钮点击事件中使用此代码将用户带到设置页面

if(UIDevice.CurrentDevice.CheckSystemVersion(8,0))
{
NSString settingsString=UIApplication.OpenSettingsUrlString;
NSUrl url=新的NSUrl(设置字符串);
UIApplication.SharedApplication.OpenUrl(url);
}
我想知道是否有办法检查设备级位置服务是否关闭,并将用户转到该设置页面,而不是应用程序级位置设置,反之亦然


另外,如果禁用设备级位置服务,如何将用户带到位置设置屏幕。我尝试了一些组合,但我不确定NSUrl将是什么

欢迎来到移动和Xamarin!是的,您可以添加几个Nuget软件包来帮助您做到这一点。越来越受欢迎的是Xamarin Essentials


如中所示,只需尝试获取位置,它将自行处理权限,如果您面临PermissionException,则可以按原样打开设置!快乐编码

欢迎使用移动和Xamarin!是的,您可以添加几个Nuget软件包来帮助您做到这一点。越来越受欢迎的是Xamarin Essentials


如中所示,只需尝试获取位置,它将自行处理权限,如果您面临PermissionException,则可以按原样打开设置!快乐编码检查设备级位置权限:

 bool deviceLevel = CLLocationManager.LocationServicesEnabled;
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;
    }
}
文件如下:

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

 bool deviceLevel = CLLocationManager.LocationServicesEnabled;
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;
    }
}
文件如下:

更新:

请看下面两条线索中的答案:和

有人说

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

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


只需使用
UIApplication.opensetingsurlstring
打开设置页面。

检查设备级位置权限:

 bool deviceLevel = CLLocationManager.LocationServicesEnabled;
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;
    }
}
文件如下:

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

 bool deviceLevel = CLLocationManager.LocationServicesEnabled;
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;
    }
}
文件如下:

更新:

请看下面两条线索中的答案:和

有人说

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

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


只需使用
UIApplication.opensetingsurlstring
打开设置页面。

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

如果(!CLLocationManager.LocationServicesEnabled)
{
Console.WriteLine(“位置服务已关闭,请转到设置”);
//这可能会使用以下字符串拒绝您的应用程序
if(UIDevice.CurrentDevice.CheckSystemVersion(10,0))
{
UIApplication.SharedApplication.OpenUrl(新的NSUrl(“App-Prefs:root=General”);
}
其他的
{
UIApplication.SharedApplication.OpenUrl(新的NSUrl(“prefs:root=General”);
}
}
else if(CLLocationManager.Status==CLAuthorizationStatus.Denied||
CLLocationManager.Status==CLAuthorizationStatus.NotDetermined||
CLLocationManager.Status==CLAuthorizationStatus.Restricted)
{
Console.WriteLine(“位置服务仅针对您的应用关闭,进入应用设置”);
OpenUrl(新的NSUrl(UIApplication.opensetingsurlstring));
}
在打开系统设置或应用程序设置方面,
UIApplication.opensetingsurlstring
将根据文档转到应用程序设置:

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

您可以使用以下字符串:

prefs:root=General

或iOS 10及以上版本

应用程序优先级:根=常规


但是苹果可能会拒绝你的应用,tbh我认为不值得仅仅因为这个原因而尝试进入设置,而是取决于你。

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

如果(!CLLocationManager.LocationServicesEnabled)
{
Console.WriteLine(“位置服务已关闭,请转到设置”);
//这可能会使用以下字符串拒绝您的应用程序
if(UIDevice.CurrentDevice.CheckSystemVersion(10,0))
{
UIApplication.SharedApplication.OpenUrl(新的NSUrl(“App-Prefs:root=General”);
}
其他的
{
UIApplication.SharedApplication.OpenUrl(新的NSUrl(“prefs:root=General”);
}
}
else if(CLLocationManager.Status==CLAuthorizationStatus.Denied||
CLLocationManager.Status==CLAuthorizationStatus.NotDetermined||
CLLocationManager.Status==CLAuthorizationStatus.Restricted)
{
Console.WriteLine(“位置服务仅针对您的应用关闭,进入应用设置”);
OpenUrl(新的NSUrl(UIApplication.opensetingsurlstring));
}
在打开系统设置或应用程序设置方面,
UIApplication.opensetingsurlstring
将根据文档转到应用程序设置:

UIApplicationOpenSettingsURLString 用于创建可以传递给openURL:方法的URL。当您打开根据此字符串构建的URL时,th