簡體   English   中英

Xamarin iOS如何檢查位置服務是否已關閉或應用級設備位置是否已關閉

[英]Xamarin iOS how to check if Location Services is off or app level device location is off

我是Xamarin iOS和移動設備的新手。 我有一個需要位置服務的應用程序,在我的視圖控制器上我有一個按鈕,用戶可以訪問應用程序的位置設置,但是,如果主設備位置關閉,用戶將無法對應用程序級別執行任何操作位置設置。

我在我的按鈕點擊事件中使用此代碼將用戶帶到設置頁面。

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

我想知道是否有辦法檢查設備級別的位置服務是否已關閉並將用戶帶到該設置頁面而不是應用級別的位置設置,反之亦然。

如果禁用設備級別位置服務,如何將用戶帶到位置設置屏幕。 我嘗試了幾種組合,但我不確定NSUrl會是什么。

歡迎來到手機和Xamarin! 是的,你可以添加幾個Nuget包來幫助你做到這一點。 一個越來越受歡迎的是Xamarin Essentials。

正如他們在文檔中所示 ,只是嘗試獲取位置,它將自己處理權限,如果您面對PermissionException,那么您可以按原樣打開設置! 快樂的編碼

要檢查設備級別位置權限:

 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將被拒絕從App Store中刪除。 只需打開設置頁面。

無法直接打開設備位置權限,不允許通過App Store規則。

只需使用UIApplication.OpenSettingsUrlString; 打開設置頁面。

您可以檢查用戶是否在設置級別禁用了位置服務,然后檢查應用級別:

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時,系統會啟動“設置”應用並顯示應用的自定義設置(如果有)。

你可以使用字符串:

首選項:根=通用

或適用於iOS 10及更高版本

應用 - 偏好設置:根=一般

但蘋果可能拒絕你的應用程序,我認為僅僅因為這個原因而不值得嘗試去設置,但由你決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM