宣告應用程式權限

「使用權限的工作流程」(workflow for using permissions) 所述,如果開發人員要求存取應用程式權限,就必須在其應用程式的資訊清單檔案中宣告這些權限。應用程式商店和使用者可借助這些宣告,進而瞭解應用程式會要求的權限組合。

要求權限的執行程序取決於權限類型:

  • 如果是請求安裝期間權限,例如一般權限或簽名權限,在安裝期間,系統會自動授予權限。
  • 如果是請求執行階段權限,並且應用程式安裝在搭載 Android 6.0 (API 級別 23) 或以上版本的裝置上,則開發人員必須自行要求權限

新增宣告至應用程式資訊清單

如要宣告應用程式會要求的權限,請在其資訊清單檔案中加入適當的 <uses-permission> 元素。舉例來說,應用程式如需存取相機,則資訊清單中會顯示這段文字:

AndroidManifest.xml

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

宣告硬體為選用元素

如有 CAMERA 這類權限,應用程式即可存取部分 Android 裝置特有的硬體元件。如果應用程式會宣告任何與硬體相關的權限,請考量應用程式在沒有該硬體的裝置上是否無法運作。在大多數情況下,硬體為非必要元素,所以最好將 <uses-feature> 宣告中的 android:required 設為 false,將硬體宣告為選用元素,詳情請參閱以下程式碼範例:

AndroidManifest.xml

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

判斷硬體適用情況

如果將硬體宣告為選用元素,那麼在沒有該硬體的裝置上,應用程式就可以正常執行。如要檢查裝置是否具有特定硬體,請使用 hasSystemFeature() 方法,詳情請參閱以下程式碼範例。如果裝置不具備該硬體,請停用該應用程式功能。

Kotlin

// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Java

// Check whether your app is running on a device that has a front-facing camera.
if (getApplicationContext().getPackageManager().hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

依 API 級別宣告權限

如應用程式僅在搭載 Android 6.0 (API 等級 23) 或以上版本的裝置宣告權限 (意即提供執行階段權限的裝置),請加入 uses-permission-sdk-23 元素,而非 uses-permission

使用這些元素時,開發人員可以設定 maxSdkVersion 屬性。該屬性表示搭載比 maxSdkVersion 更高版本的裝置不需要特定權限。