宣告套件瀏覽權限需求

建立應用程式時,請務必考量應用程式要存取的裝置上安裝的其他應用程式組合。如果您的應用程式指定 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> 元素中使用 pathpathPrefixpathPatternport 屬性。系統會假設將每個屬性的值設為一般萬用字元字元 (*) 來運作。
  • 無法使用 <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 權限的應用程式所適用的規範。