ประกาศความต้องการด้านระดับการเข้าถึงแพ็กเกจ

เมื่อสร้างแอป คุณควรพิจารณาแอปอื่นๆ ในอุปกรณ์ที่แอปของคุณต้องโต้ตอบด้วย หากแอปกำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ขึ้นไป ระบบจะทำให้แอปบางแอปมองเห็นได้โดยอัตบุัติ แต่จะกรองแอปอื่นๆ ออกโดยค่าเริ่มต้น คู่มือนี้จะอธิบายวิธีทำให้แอปอื่นๆ เหล่านั้นมองเห็นได้

หากแอปกำหนดเป้าหมายเป็น Android 11 ขึ้นไปและต้องโต้ตอบ กับแอปอื่นๆ นอกเหนือจากแอปที่มองเห็นได้โดยอัตโนมัติ ให้เพิ่มองค์ประกอบ <queries> ในไฟล์ Manifest ของแอป ภายในองค์ประกอบ <queries> ให้ระบุแอปอื่นๆ ตาม ชื่อแพ็กเกจ ตามลายเซ็น Intent หรือ ตามสิทธิ์ของผู้ให้บริการ ตามที่อธิบายไว้ในส่วนต่อไปนี้

ชื่อแพ็กเกจที่เฉพาะเจาะจง

หากทราบแอปที่เฉพาะเจาะจงซึ่งต้องการค้นหาหรือโต้ตอบด้วย เช่น แอปที่ผสานรวมกับแอปของคุณหรือแอปที่คุณใช้บริการ ให้ใส่ชื่อแพ็กเกจของแอปเหล่านั้นในชุด องค์ประกอบ <package> ภายในองค์ประกอบ <queries> ดังนี้

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

สื่อสารกับแอปโฮสต์ในไลบรารี

หากคุณพัฒนาไลบรารี Android คุณสามารถประกาศความต้องการระดับการมองเห็นแพ็กเกจได้ โดยการเพิ่มองค์ประกอบ <queries> ในไฟล์ Manifest ของ AAR องค์ประกอบ <queries> นี้มีฟังก์ชันการทำงานเหมือนกับองค์ประกอบที่แอปประกาศได้ในไฟล์ Manifest ของตัวเอง

หากไลบรารีของคุณเกี่ยวข้องกับการสื่อสารกับแอปโฮสต์ เช่น การใช้บริการที่ผูกไว้ ให้ใส่องค์ประกอบ <package> ที่ ระบุชื่อแพ็กเกจของแอปโฮสต์ ดังนี้

<!-- Place inside the <queries> element. -->
<package android:name=PACKAGE_NAME />

การใส่ประกาศนี้จะช่วยให้คุณตรวจสอบได้ว่าแอปโฮสต์มีการติดตั้งอยู่หรือไม่ และ โต้ตอบกับแอปโฮสต์ได้ เช่น การเรียกใช้ bindService() แอปที่เรียกใช้ซึ่งใช้ไลบรารีของคุณ จะมองเห็นได้ โดยอัตโนมัติสำหรับแอปโฮสต์อันเป็นผลมาจากการโต้ตอบ นี้

แพ็กเกจที่ตรงกับลายเซ็นตัวกรอง Intent

แอปของคุณอาจต้องค้นหาหรือโต้ตอบกับชุดแอปที่ทำหน้าที่เฉพาะ แต่คุณอาจไม่ทราบชื่อแพ็กเกจที่เฉพาะเจาะจงที่จะใส่ ในกรณีนี้ คุณสามารถระบุ ลายเซ็นตัวกรอง Intent ในองค์ประกอบ <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> เพียงองค์ประกอบเดียว
  • คุณไม่สามารถใช้แอตทริบิวต์ path, pathPrefix, pathPattern, หรือ port ในองค์ประกอบ <data> ระบบจะทำงานราวกับว่าคุณตั้งค่าแอตทริบิวต์แต่ละรายการเป็นอักขระไวลด์การ์ดทั่วไป (*)
  • คุณไม่สามารถใช้แอตทริบิวต์ mimeGroup ขององค์ประกอบ <data>
  • ภายในองค์ประกอบ <data> ขององค์ประกอบ <intent> เดียว คุณสามารถใช้แอตทริบิวต์แต่ละรายการต่อไปนี้ได้ไม่เกิน 1 ครั้ง

    • mimeType
    • scheme
    • host

    คุณสามารถกระจายแอตทริบิวต์เหล่านี้ในองค์ประกอบ <data> หลายรายการหรือใช้ ในองค์ประกอบ <data> รายการเดียวก็ได้

องค์ประกอบ <intent> รองรับอักขระไวลด์การ์ดทั่วไป (*) เป็น ค่าสำหรับแอตทริบิวต์บางรายการ ดังนี้

  • แอตทริบิวต์ name ขององค์ประกอบ <action>
  • ประเภทย่อยของแอตทริบิวต์ mimeType ขององค์ประกอบ <data> (image/*)
  • ประเภทและประเภทย่อยของแอตทริบิวต์ mimeType ขององค์ประกอบ <data> (*/*)
  • แอตทริบิวต์ scheme ขององค์ประกอบ <data>
  • แอตทริบิวต์ host ขององค์ประกอบ <data>

ระบบไม่รองรับการผสมข้อความกับอักขระไวลด์การ์ด เช่น prefix* เว้นแต่จะระบุไว้เป็นอย่างอื่นในรายการก่อนหน้า

แพ็กเกจที่ใช้สิทธิ์ที่เฉพาะเจาะจง

หากคุณต้องค้นหา ผู้ให้บริการ เนื้อหา แต่ ไม่ทราบชื่อแพ็กเกจที่เฉพาะเจาะจง คุณสามารถประกาศสิทธิ์ของผู้ให้บริการ ในองค์ประกอบ <provider> ได้ดังที่แสดง ในข้อมูลโค้ดต่อไปนี้

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

คุณสามารถประกาศสิทธิ์ของผู้ให้บริการในองค์ประกอบ <queries> รายการเดียวได้ ภายในองค์ประกอบ <queries> คุณสามารถประกาศองค์ประกอบ <provider> อย่างน้อย 1 รายการ องค์ประกอบ A <provider> สามารถมีสิทธิ์ของผู้ให้บริการรายการเดียวหรือรายการสิทธิ์ของผู้ให้บริการที่คั่นด้วยเครื่องหมายอัฒภาคa

แอปทั้งหมด (ไม่แนะนำ)

ในบางกรณีที่พบได้ยาก แอปของคุณอาจต้องค้นหาหรือโต้ตอบกับแอปทั้งหมดที่ติดตั้งในอุปกรณ์ โดยไม่ขึ้นอยู่กับคอมโพเนนต์ที่แอปเหล่านั้นมี ระบบมีสิทธิ์ QUERY_ALL_PACKAGES เพื่อให้แอปของคุณมองเห็นแอปอื่นๆ ทั้งหมดที่ติดตั้งไว้

ตัวอย่างกรณีการใช้งานที่ควรใส่สิทธิ์ QUERY_ALL_PACKAGES ได้แก่

  • แอปเพื่อการช่วยเหลือพิเศษ
  • เบราว์เซอร์
  • แอปการจัดการอุปกรณ์
  • แอปความปลอดภัย
  • แอปป้องกันไวรัส

อย่างไรก็ตาม โดยปกติแล้วคุณสามารถทำตามกรณีการใช้งานของแอปได้โดยการโต้ตอบกับชุดแอปที่มองเห็นได้โดยอัตโนมัติ และโดยการประกาศแอปอื่นๆ ที่แอปของคุณต้องเข้าถึงในไฟล์ Manifest แอปของคุณควรร้องขอระดับการมองเห็นแพ็กเกจให้น้อยที่สุดเท่าที่จำเป็นเพื่อให้แอปทำงานได้ เพื่อเคารพความเป็นส่วนตัวของผู้ใช้

การอัปเดตนโยบายจาก Google Play นี้มีหลักเกณฑ์สำหรับแอปที่ต้องใช้สิทธิ์ QUERY_ALL_PACKAGES