評估應用程式是否需要宣告權限

請先評估應用程式是否需要此權限再行宣告。當使用者企圖執行的應用程式功能需要執行階段權限時,應用程式必須中斷使用者工作,並提出權限要求。那麼使用者就需要抉擇。如果使用者不瞭解應用程式要求特定權限的原因,則可拒絕授權,甚至解除安裝應用程式。

請評估其他已安裝應用程式是否能代表您的應用程式執行功能。如果可以,您應使用意圖以將工作委派給其他應用程式。如此一來,其他應用程式會代您宣告您所需的權限。

宣告權限的替代方案

本節說明應用程式可以滿足多種功能,而無需宣告任何權限。

顯示附近地點

應用程式可能需要知道使用者的概略位置。如要顯示附近餐廳這類位置辨識資訊,知道概略位置就很有幫助。

某些功能會需要裝置的概略位置。在這種情況,請根據應用程式需要位置辨識資訊的頻率,採取下列其中一種做法:

  • 如果應用程式頻繁需要位置資訊,請宣告 ACCESS_COARSE_LOCATION 權限。取得權限後,就能依據定位服務取得裝置的概略位置,詳情請參閱概略位置精確度的相關文件說明。
  • 如果應用程式並不常用到位置資訊或僅使用一次,不妨請使用者輸入地址或郵遞區號。

其他使用情況則需要裝置更精確的位置資訊。如需精確的位置,就可以宣告 ACCESS_FINE_LOCATION 權限。

拍照

使用者可能會使用系統預先安裝的相機應用程式,在您的應用程式中拍照。

在這種情況下,請勿宣告 CAMERA 權限,而是叫用 ACTION_IMAGE_CAPTURE 意圖動作。

錄影

使用者可能會使用系統預先安裝的相機應用程式,在您的應用程式中錄製影片。

在這種情況下,請勿宣告 CAMERA 權限,而是叫用 ACTION_VIDEO_CAPTURE 意圖動作。

開啟應用程式建立的媒體

應用程式會顯示相片或影片這類媒體內容,為使用者於應用程式內創作。在此情況下,只要應用程式目標版本是 Android 10 或以上,在搭載 Android 10 (API 級別 29) 或以上版本的裝置中,就不必使用 READ_EXTERNAL_STORAGE 權限。如果應用程式以 Android 10 為目標版本,請停用限定範圍的儲存空間

如要與舊版裝置相容,請宣告 READ_EXTERNAL_STORAGE 權限,並將 android:maxSdkVersion 設為 28

請從從下列媒體商店已知的集合中擇一尋找檔案:

如要直接查詢媒體商店中的媒體內容,則用 ContentResolver,請勿自行探索。

開啟文件

應用程式會顯示在使用者或其他應用程式中建立的文件。常見例子如文字檔。

在這種情況下,只要裝置搭載版本與應用程式目標版本相同 (適用 Android 10 或以上),就不需要使用 READ_EXTERNAL_STORAGE 權限。如果應用程式以 Android 10 為目標版本,請停用限定範圍儲存空間

如要與舊版裝置相容,請宣告 READ_EXTERNAL_STORAGE 權限,並將 android:maxSdkVersion 設為 28

請根據建立文件的應用程式,執行下列任一操作:

找出執行應用程式的裝置

特定的應用程式執行個體會需要得知運行中的裝置。如應用程式有裝置專屬偏好設定或通訊 (例如電視裝置和穿戴式裝置的不同播放清單),這項功能就能派上用場。

在這種情況下,請勿直接存取裝置的 IMEI。實際上,搭載 Android 10 版本或以上的裝置也無法進行此操作,因此建議改用下列任一做法:

  • 請使用執行個體 ID 程式庫,取得應用程式執行個體的不重複裝置 ID。
  • 請建立自己的識別碼,限定應用程式儲存空間。建立識別碼請使用基本系統函式,例如 randomUUID()

以藍牙配對裝置

應用程式可以透過藍牙轉移資料至其他裝置,進而提供更優質的使用體驗。

如要提供這項功能,請勿宣告 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIIONBLUETOOTH_ADMIN 權限。請改用隨附裝置配對

在應用程式中斷時,暫停媒體活動

如果有來電或是使用者設定的鬧鐘響起,應用程式應暫停播放任何音訊媒體,直到應用程式再次成為使用者音訊焦點。

如要提供這項功能,請勿宣告 READ_PHONE_STATE 權限。請改為實作 onAudioFocusChange() 事件處理常式,在系統轉移音訊焦點時,此常式會自動執行。進一步瞭解如何實作音訊焦點

過濾來電

為了盡可能減少使用者受到干擾,應用程式可能會過濾不重要的來電。

如要提供這項功能,請勿宣告 READ_PHONE_STATE 權限。請改用 CallScreeningService API。