建立應用程式時,請務必考量需要與應用程式進行互動的其他應用程式。如果您的應用程式指定 Android 11 (API 級別 30) 以上版本,系統會自動向您的應用程式授予部分應用程式的瀏覽權限,但預設會篩除其他應用程式。本指南會說明如何為您的應用程式授予其他應用程式的瀏覽權限。
如果應用程式指定的是 Android 11 以上版本,且除了系統自動授予瀏覽權限的應用程式,還需要與其他應用程式互動,請在應用程式的資訊清單檔案中加入 <queries>
元素。在 <queries>
元素中,根據套件名稱、意圖簽章或供應器授權指定其他應用程式,如後續章節所述。
特定套件名稱
如果您知道要查詢或互動的特定應用程式,例如與您的應用程式整合的應用程式,或是您使用其服務的應用程式,請將套件名稱加到 <queries>
元素內的一組 <package>
元素中:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
與程式庫中的主機應用程式通訊
如果您開發 Android 程式庫,只要在 AAR 資訊清單檔案中新增 <queries>
元素,即可宣告套件的瀏覽權限需求。此 <queries>
元素的功能與應用程式可在其資訊清單中宣告的元素相同。
如果程式庫會與主應用程式通訊 (例如使用繫結服務),請加入指定主應用程式套件名稱的 <package>
元素:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
納入此宣告後,即可檢查主應用程式是否已安裝,並與該應用程式互動,例如呼叫 bindService()
。透過此互動,使用程式庫的呼叫應用程式會自動顯示在主機應用程式中。
符合意圖篩選器簽章的套件
您的應用程式可能需要查詢或與具有特定用途的應用程式組合互動,但您可能不知道要包含的套件名稱。在此情況下,您可以在 <queries>
元素中列出意圖篩選器簽章。這樣一來,您的應用程式就可找出符合 <intent-filter>
元素的應用程式。
以下程式碼範例顯示 <intent>
元素,可讓應用程式看到其他支援 JPEG 圖片共用功能的安裝版應用程式:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
<intent>
元素具有下列限制:
- 只能包含一個
<action>
元素。 - 無法在
<data>
元素中使用path
、pathPrefix
、pathPattern
或port
屬性。系統會假設將每個屬性的值設為一般萬用字元字元 (*
) 來運作。 - 無法使用
<data>
元素的mimeGroup
屬性。 在單一
<intent>
元素的<data>
元素中,最多可以使用以下每個屬性:mimeType
scheme
host
您可以將這些屬性發佈至多個
<data>
元素,或在單一<data>
元素中使用這些屬性。
<intent>
元素支援一般萬用字元 (*
) 做為幾個屬性的值:
<action>
元素的name
屬性。<data>
元素 (image/*
) 的mimeType
屬性子類型。<data>
元素 (*/*
) 的mimeType
屬性類型和子類型。<data>
元素的scheme
屬性。<data>
元素的host
屬性。
除非另有設定,否則系統不支援混合使用文字和萬用字元,如 prefix*
。
使用特定授權的套件
如果需要查詢某個內容供應器,但您不知道特定套件名稱,可以在 <provider>
元素中宣告供應器授權,如以下程式碼片段所示:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
您可以在單一 <queries>
元素中宣告多個供應器授權,也可以在 <queries>
元素中宣告一或多個 <provider>
元素。<provider>
元素可包含單一供應器授權,或是以半形分號分隔的供應器授權清單。
所有應用程式 (不建議)
在極少數情況下,您的應用程式可能會查詢裝置上的所有安裝版應用程式,或是與之互動,不論其中包含的元件為何。為了讓您的應用程式能夠查看所有其他安裝版應用程式,系統會提供 QUERY_ALL_PACKAGES
權限。
以下列舉適合納入 QUERY_ALL_PACKAGES
權限的一些用途:
- 無障礙應用程式
- 瀏覽器
- 裝置管理應用程式
- 安全性應用程式
- 防毒應用程式
不過,您通常可以透過以下方式實現應用程式的用途:與系統自動授予瀏覽權限的應用程式組合互動,以及在資訊清單檔案中宣告應用程式需要存取的其他應用程式。為尊重使用者隱私,您的應用程式應要求最低限度所需的套件瀏覽權限,以便讓應用程式正常運作。
這份 Google Play 政策更新提供了需要 QUERY_ALL_PACKAGES
權限的應用程式所適用的規範。