要求位置存取權

為保護使用者隱私,使用定位服務的應用程式必須要求位置存取權。

多項權限與位置相關。您要求哪些權限以及如何要求這些權限,取決於應用程式用途適用的地點規定而定。

本頁面說明不同類型的地點規定,並說明如何在各種情況下要求位置存取權。

如要要求位置存取權,請遵循所有執行階段權限的最佳做法。

位置資訊存取權限類型

每種權限都具有以下特性:

前景位置資訊

如果您的應用程式包含只會分享或接收位置資訊一次,或只在指定時間內分享位置資訊的功能,則必須取得前景位置資訊存取權才能執行該功能。以下提供幾個範例:

  • 使用者可以利用導航應用程式提供的功能,取得即時路線導航。
  • 使用者可以利用訊息應用程式提供的功能,將自己目前的位置資訊分享給其他使用者。

如果應用程式的特定功能會在下列任一情況下存取裝置的目前位置,系統就會判定您的應用程式將使用前景位置資訊:

  • 屬於應用程式的活動會顯示在畫面上。
  • 您的應用程式正在執行前景服務。執行前景服務時,系統會透過顯示常駐通知來吸引使用者的注意。應用程式在背景執行時仍會保留位置存取權,例如使用者按下裝置的「主畫面」按鈕或關閉裝置螢幕時。

    此外,您應宣告 location前景服務類型,如以下程式碼片段所示。在 Android 10 (API 級別 29) 以上版本中,您必須宣告此前景服務類型。

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

當應用程式要求 ACCESS_COARSE_LOCATION 權限或 ACCESS_FINE_LOCATION 權限時,即表示您宣告應用程式需用到前景位置資訊,如以下程式碼片段所示:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

背景位置資訊

如果應用程式中的特定功能會持續與其他使用者分享位置或使用 Geofencing API,應用程式就需要背景位置資訊存取權。以下提供幾個範例:

  • 使用者可以利用家庭成員位置資訊分享應用程式提供的功能,與家庭成員持續分享位置資訊。
  • 使用者可以利用 IoT 應用程式的功能設定家用裝置,讓這些裝置在使用者外出時關閉,並在回家時重新開啟。

只有應用程式在符合前景位置資訊一節所述以外的情況下存取裝置的目前位置時,系統才會判定應用程式將使用背景位置資訊。背景位置精確度與前景位置精確度相同,具體取決於應用程式宣告的位置存取權。

在 Android 10 (API 級別 29) 以上版本中,您必須在應用程式的資訊清單中宣告 ACCESS_BACKGROUND_LOCATION 權限,才能在執行階段要求背景位置資訊存取權。而在舊版 Android 上,當您的應用程式獲得前景位置資訊存取權時,該應用程式也會自動獲得背景位置資訊存取權。

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

精確度

Android 支援下列級別的定位準確度:

概略
提供裝置位置預估值。如果此位置預估值來自 LocationManagerServiceFusedLocationProvider,則此預估值準確度為約 3 平方公里 (約 1.2 平方英里)。宣告 ACCESS_COARSE_LOCATION 權限 (而非 ACCESS_FINE_LOCATION 權限) 時,應用程式可接收達到此準確度的位置。
精確
提供盡可能準確的裝置位置預估值。如果位置預估值來自 LocationManagerServiceFusedLocationProvider,則此預估值通常約在 50 公尺 (160 英尺) 內,有時甚至不會超過幾公尺 (10 英尺)。宣告 ACCESS_FINE_LOCATION 權限時,應用程式可接收達到此準確度的位置。

如果使用者授予大概位置存取權,則無論應用程式宣告的位置存取權為何,您的應用程式都只能存取大概位置。

即便使用者僅授予概略位置存取權,您的應用程式仍可正常運作。如果應用程式中的某項功能需要透過 ACCESS_FINE_LOCATION 權限來要求精確位置,您可以要求使用者允許應用程式存取精確位置

授予背景位置資訊權限的提醒

在 Android 10 (API 級別 29) 以上版本中,使用者授予背景位置資訊存取權後,如果應用程式功能首次在背景中存取裝置位置資訊,系統會排程傳送給使用者的通知。此通知會提醒使用者,他們已經允許應用程式隨時存取裝置位置資訊。圖 8 顯示了通知範例。

查看應用程式 SDK 依附元件中的位置規定

查看應用程式是否使用任何依附於位置存取權的 SDK (尤其是 ACCESS_FINE_LOCATION 權限)。如需進一步瞭解,請參閱 Medium 上的瞭解 SDK 依附元件行為網誌文章。

其他資源

如要進一步瞭解 Android 中的位置存取權,請參閱下列資料:

程式碼研究室

影片

範例