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