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

ขณะสร้างแอป คุณจำเป็นต้องพิจารณาแอปอื่นๆ ในอุปกรณ์ ที่แอปของคุณต้องโต้ตอบด้วย หากแอปกำหนดเป้าหมาย 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 ได้

ถ้าไลบรารีของคุณมีการสื่อสารกับแอปโฮสต์ เช่น การใช้ bound service [บริการ] ให้ใส่เอลิเมนต์ <package> ที่ ระบุชื่อแพ็กเกจของแอปโฮสต์ ดังนี้

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

การรวมการประกาศนี้จะทําให้ตรวจสอบได้ว่ามีการติดตั้งแอปโฮสต์ไว้แล้วหรือไม่ และ โต้ตอบกับแอป เช่น การโทร bindService() แอปการโทรที่ใช้คลังจะเปลี่ยนโหมดโดยอัตโนมัติ แสดงกับแอปโฮสต์ อันเนื่องมาจาก การโต้ตอบนี้

แพ็กเกจที่ตรงกับลายเซ็นของตัวกรอง 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> เพียง 1 รายการเท่านั้น
  • คุณใช้แอตทริบิวต์ 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 รายการ ต องค์ประกอบ <provider> สามารถรวมหน่วยงานของผู้ให้บริการรายเดียวหรือ รายการผู้ออกใบรับรองที่คั่นด้วยเครื่องหมายอัฒภาค

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

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

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

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

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

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