我一般对Xamarin iOS和移动开发人员是陌生的。 我有一个需要位置服务的应用程序,在我的视图控制器上,我有一个按钮,可以将用户转到该应用程序的位置设置,但是,如果主设备位置关闭,则用户将无法使用该应用程序级别执行任何操作位置设置。
我在按钮单击事件上使用此代码将用户带到设置页面。
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
NSString settingsString = UIApplication.OpenSettingsUrlString;
NSUrl url = new NSUrl(settingsString);
UIApplication.SharedApplication.OpenUrl(url);
}
我想知道是否有一种方法可以检查设备级别的位置服务是否已关闭,并将用户带到该设置页面,而不是应用程序级别的位置设置,反之亦然。
如果禁用了设备级别的位置服务,还如何将用户带到“位置设置”屏幕。我尝试了几种组合,但不确定NSUrl是什么。
答案 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-11和how-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可能会拒绝您的应用,所以我认为不值得仅出于这个原因而尝试设置,而是由您自己决定。