建立應用程式時,請務必考量應用程式要存取的裝置上安裝的其他應用程式組合。如果您的應用程式指定 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>
元素相符的應用程式。
下列範例可讓您的應用程式查看支援 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>
元素中宣告所有提供者授權。格式視您宣告的提供者數量而定︰
- 單一 <provider> 元素
- 在元素中,宣告以半形分號分隔的授權清單。
- 多個 <provider> 元素
- 在每個元素中,宣告單一授權或以半形分號分隔的授權清單。
所有應用程式 (不建議)
在極少數情況下,您的應用程式可能會查詢裝置上的所有安裝版應用程式,或是與之互動,不論其中包含的元件為何。為了讓您的應用程式能夠查看所有其他安裝版應用程式,系統會提供 QUERY_ALL_PACKAGES
權限。
下面列舉了一些 QUERY_ALL_PACKAGES
權限適合納入的用途:
- 無障礙應用程式
- 瀏覽器
- 裝置管理應用程式
- 安全性應用程式
- 防毒應用程式
但在絕大多數情況下,您可以透過與自動顯示的應用程式組合互動,以及在資訊清單檔案中宣告應用程式需要存取的其他應用程式,來執行應用程式的用途。為尊重使用者隱私,您的應用程式應要求最低限度的套件瀏覽權限,以便應用程式正常運作。
這份 Google Play 政策更新提供了需要 QUERY_ALL_PACKAGES
權限的應用程式所適用的規範。