ขณะสร้างแอป คุณควรพิจารณาแอปอื่นๆ ในอุปกรณ์ที่แอปของคุณต้องโต้ตอบด้วย หากแอปของคุณกำหนดเป้าหมายเป็น 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>
เพียง 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>
เดียวได้ คุณสามารถประกาศองค์ประกอบ <provider>
อย่างน้อย 1 รายการภายในองค์ประกอบ <queries>
องค์ประกอบ A
<provider>
สามารถมีอำนาจของผู้ให้บริการรายเดียวหรือรายการอำนาจของผู้ให้บริการที่คั่นด้วย
เครื่องหมายอัฒภาค
แอปทั้งหมด (ไม่แนะนำ)
ในบางกรณีที่พบได้ยาก แอปอาจต้องค้นหาหรือโต้ตอบกับแอปที่ติดตั้งทั้งหมด
ในอุปกรณ์ โดยไม่ขึ้นอยู่กับคอมโพเนนต์ที่แอปเหล่านั้นมี หากต้องการอนุญาตให้แอปของคุณ
ดูแอปอื่นๆ ทั้งหมดที่ติดตั้งไว้ ระบบจะให้สิทธิ์
QUERY_ALL_PACKAGES
ตัวอย่างกรณีการใช้งานที่ควรมีสิทธิ์ QUERY_ALL_PACKAGES
ได้แก่
- แอปเพื่อการช่วยเหลือพิเศษ
- เบราว์เซอร์
- แอปการจัดการอุปกรณ์
- แอปความปลอดภัย
- แอปป้องกันไวรัส
อย่างไรก็ตาม โดยปกติแล้ว คุณจะทำตามกรณีการใช้งานของแอปได้โดยโต้ตอบกับชุดแอปที่มองเห็นได้โดยอัตโนมัติ และโดยการประกาศแอปอื่นๆ ที่แอปของคุณต้องเข้าถึงในไฟล์ Manifest แอปของคุณควรร้องขอระดับการมองเห็นแพ็กเกจให้น้อยที่สุดเท่าที่จำเป็นเพื่อให้แอปทำงานได้ ทั้งนี้เพื่อเคารพความเป็นส่วนตัวของผู้ใช้
การปรับปรุงนโยบายจาก Google
Play
นี้จะให้คำแนะนำสำหรับแอปที่ต้องใช้สิทธิ์ QUERY_ALL_PACKAGES