Android 中的權限

應用程式權限可保護以下項目的存取權,以保障使用者隱私:

  • 受限資料,例如系統狀態和使用者的聯絡資訊。
  • 受限操作,例如連接配對的裝置和錄製音訊。

本頁面提供 Android 權限運作方式的總覽,包括使用權限的整體工作流程、各種權限的說明,以及在應用程式中使用權限的最佳做法。其他頁面將介紹如何評估您的應用程式是否需要要求權限宣告權限要求執行階段權限,以及限制其他應用程式如何與您的應用程式元件互動

如要查看 Android 應用程式權限的完整清單,請參閱「權限 API 參考資料頁面」。

如要查看演示權限工作流程的範例應用程式,請前往 GitHub 上的 Android 權限範例存放區

使用權限的工作流程

如果應用程式提供的功能可能需要存取受限資料或受限操作,請判斷您能否在無須宣告權限的情況下取得資訊或執行操作。您不需要宣告任何權限,即可在應用程式中實現各種用途,例如拍照、暫停播放媒體內容及顯示相關廣告。

如果您認為應用程式必須存取受限資料或執行受限操作才能實現某個用途,請宣告相應的權限。某些權限是使用者安裝應用程式時自動授予的權限,稱為安裝期間權限;其他權限則需要應用程式在執行階段進一步提出要求,稱為執行階段權限

圖 1 說明使用應用程式權限的工作流程:

圖 1. 圖表顯示在 Android 上使用權限的整體流程。

權限類型

Android 將權限分為不同的類型,包括安裝期間權限、執行階段權限和特殊權限。每種權限類型都代表系統為應用程式授予權限時,應用程式能存取的受限資料範圍,以及可執行的受限操作範圍。

安裝期間權限

左圖列出了應用程式的安裝期間權限清單,右圖顯示了包含「允許」與「拒絕」這 2 個選項的彈出式視窗。
圖 2. 應用程式商店中顯示的應用程式安裝期間權限清單。

安裝期間權限能限制應用程式存取受限資料,並允許應用程式執行對系統或其他應用程式影響程度最少的受限操作。當您宣告應用程式的安裝期間權限時,系統會在使用者安裝應用程式時自動為應用程式授予這類權限。當使用者查看應用程式詳細資料頁面時,應用程式商店會向使用者顯示安裝期間權限聲明,如圖 2 所示。

Android 提供數種安裝期間權限子類型,包括一般權限和簽章權限。

一般權限

這類權限允許存取超出應用程式沙箱範圍的資料和操作。不過,這些資料和操作幾乎不會對使用者隱私權及其他應用程式的運作造成風險。

系統會為一般權限指派「一般」防護等級,如權限 API 參考資料頁面所示。

簽章權限

如果應用程式宣告了另一個應用程式定義的簽章權限,且如果兩個應用程式以相同的憑證簽署,則系統會在安裝期間為第一個應用程式授予權限。否則,系統將無法為第一個應用程式授予權限。

系統會為簽章權限指派「簽章」防護等級,如權限 API 參考資料頁面所示。

執行階段權限

包含「允許」與「拒絕」這 2 個選項的彈出式視窗。
圖 3. 當應用程式要求執行階段權限時顯示的系統權限提示。

執行階段權限 (又稱為「危險權限」) 可為應用程式授予存取受限資料的額外權限,並允許應用程式執行更有可能影響系統及其他應用程式的受限操作。因此,您必須先在應用程式中要求執行階段權限,才能存取受限資料或執行受限操作。當應用程式要求執行階段權限時,系統會顯示執行階段權限提示 (如圖 3 所示)。

許多執行階段權限可存取「使用者私人資料」,而這種特殊受限資料包含潛在的機密資訊。使用者私人資料的例子包括位置和聯絡資訊。

麥克風和相機提供特定機密資訊的存取權。因此,系統會協助您說明應用程式存取這項資訊的原因

系統會為執行階段權限指派「危險」防護等級,如權限 API 參考資料頁面所示。

特殊權限

特殊權限對應到特定的應用程式作業。只有平台和原始設備製造商 (OEM) 可以定義特殊權限。此外,平台和 OEM 通常也會在想要保護較高權限操作 (例如在其他應用程式之上顯示內容) 的存取權時定義特殊權限。

系統設定中的「特殊應用程式存取權」頁面含有一組使用者可切換的作業,其中有許多作業是以特殊權限的形式導入。

每種特殊權限都有專屬的導入詳細資料。如需各項特殊權限的使用操作說明,請參閱「權限 API 參考資料頁面」。系統會為特殊權限指派「appop」防護等級。

最佳做法

應用程式權限以系統安全性功能為建構基礎,有助於 Android 達成與使用者隱私權相關的下列目標:

  • 控管:使用者可控管要與應用程式分享的資料。
  • 透明度:使用者瞭解應用程式會使用哪些資料,以及應用程式存取這些資料的原因。
  • 資料最小化原則:應用程式只會存取及運用使用者叫用特定工作或操作時所需的資料。

本節說明在應用程式中有效使用權限的核心最佳做法。如要進一步瞭解如何在 Android 上使用權限,請參閱「應用程式權限最佳做法」頁面。

要求最少的權限

當使用者在應用程式中要求特定操作時,應用程式只應要求完成該操作所需的權限。視您使用權限的方式而定,可能不必存取機密資訊,就能實現應用程式用途的替代方式

建立執行階段權限與特定動作的關聯

請盡可能在應用程式用途流程的後期再要求權限。例如,如果應用程式允許使用者傳送語音訊息給其他人,請等到使用者前往訊息畫面並按下「Send audio message」 按鈕後,再要求權限。使用者按下按鈕後,應用程式即可要求存取麥克風。

考量應用程式的依附元件

當您加入資料庫時,也會沿用資料庫的權限需求。請留意各項依附元件所需的權限,以及這些權限的用途。

開誠布公

提出權限要求時,請清楚說明您將存取哪些內容以及存取原因,以便讓使用者在充分瞭解相關資訊的情況下決定是否要授予權限。

明確顯示系統存取權

當您存取機密資料或硬體 (例如相機或麥克風) 時,如果系統尚未提供這些指標,請在應用程式中持續提供指示。這個提醒機制可協助使用者確實瞭解應用程式在存取受限資料或執行受限動作。

系統元件中的權限

權限不只用於要求系統功能。應用程式的系統元件可能會限制哪些其他應用程式能與您的應用程式互動,相關說明位於「限制與其他應用程式的互動」頁面。

其他資源

如要進一步瞭解 Android 的應用程式權限,請參閱下列其他資源:

範例