三州位置權限

Android 10 中的三態位置權限讓用戶可以更好地控制應用訪問其設備位置的方式。

在 Android 9 及更低版本中,用戶在授予應用位置訪問權限時會做出持久的選擇。他們可以拒絕允許,後者始終允許應用程序訪問(前台和後台)。 Android 10 中的三態位置權限為用戶提供了三個選項,允許應用訪問設備的位置。當應用程序請求權限級別時,系統會提示用戶授予或拒絕權限級別。

用戶通常會看到圖 1 中顯示的三個選項。但是,在某些用例中只需要其中兩個選項,在這種情況下只顯示這兩個選項。

Tristate location permissions screen
圖 1.三態通知屏幕

這是三個選項:

  • 始終允許:即使應用程序未使用(在後台運行),應用程序也知道設備的位置。這相當於在 Android 9 及更低版本中允許權限。
  • 僅在應用程序正在使用時允許:(僅限前台)設備的位置僅在應用程序主動運行時對應用程序可見。
  • Deny :設備的位置永遠不會對應用程序可見。這與在 Android 9 及更低版本中拒絕權限相同。

當應用請求權限時,系統會提示用戶授予位置訪問權限。

一旦用戶僅在應用程序使用時授予允許訪問權限,應用程序就可以請求增量增加對Allow all time的訪問權限。用戶會看到一個請求對話框(如圖2所示)。如果用戶選擇Keep while-in-use access ,當應用程序在下次使用時訪問設備位置時,對話框會提供Keep and don't ask again選項。

對於面向 Android 10 的應用,該對話框會在以下條件下顯示:

  • 在授予許可至少 24 小時後。
  • 僅當應用程序在後台接收位置時。
  • 當屏幕打開並且用戶沒有使用其他應用程序時。
Incremental permissions
圖 2.增量權限

要了解有關請求權限的更多信息,請參閱應用程序訪問設備位置。如果您的應用面向 Android 9 及更低版本,請參閱繼續執行用戶發起的操作

影響

三態位置權限功能會影響在後台運行時需要設備位置訪問權限的任何應用,並且在 Android 10 中是必需的。

您可以更改代碼,但不能更改或自定義框架中與權限相關的行為。

執行

三態位置權限適用於 Android 10 中的應用,與應用的目標 SDK 無關。

有關實施應用程序用例(升級)的信息,請參閱開發人員文檔中的設備升級方案設計部分。

要了解如何為不同的用例啟用訪問權限(例如要求對 Google 地圖或 Google Play 服務等應用程序進行後台位置訪問),請在應用程序訪問設備位置頁面上查看這些主題:

應用內位置訪問

用戶可以選擇僅在使用應用時將應用的訪問權限更改為拒絕或允許。對於應用內位置訪問權限,以及所有第一方和第三方應用,請提供下表中給出的用戶控制級別。

權限類型app需要請求提供的用戶選項
應用僅請求前台權限僅在使用應用程序時允許
否定
應用程序始終請求權限(前台和後台)一直允許
僅在使用應用程序時允許
否定
所有具有位置訪問請求的應用僅在使用應用程序時允許

這些權限適用於所有位置請求。僅在使用應用程序權限時才允許的應用程序不允許後台 Wi-Fi 或手機掃描。

在 Android 11 或更低版本上,具有“僅在使用應用程序時允許”權限的應用程序不允許後台藍牙掃描。從 Android 12 開始,只有在使用應用權限時才允許的應用可以通過將android:usesPermissionFlags屬性的值設置為neverForLocation來獲得藍牙掃描結果。有關更多詳細信息,請參閱App 不派生物理位置

操作系統升級

在操作系統升級到 Android 10 時,應用位置權限根據以下內容進行轉換:

  • On僅在 Use 時變為 Allow
  • Off保持關閉 ( Deny )。
  • 預先授予的位置訪問權限變為“僅在使用時允許”預先授予。