<ตัวรับ>

ไวยากรณ์:
<receiver android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string" >
    ...
</receiver>
อยู่ใน:
<application>
มีได้ดังนี้:
<intent-filter>
<meta-data>
<property>
คำอธิบาย:
ประกาศตัวรับสัญญาณการออกอากาศ ซึ่งเป็นคลาสย่อย BroadcastReceiver ให้เป็นหนึ่งในคอมโพเนนต์ของแอปพลิเคชัน ตัวรับสัญญาณการออกอากาศช่วยให้แอปพลิเคชันรับ Intent ที่ระบบหรือแอปพลิเคชันอื่นๆ ออกอากาศได้ แม้ว่าคอมโพเนนต์อื่นๆ ของแอปพลิเคชันจะไม่ได้ทำงานอยู่ก็ตาม

คุณสามารถแจ้งให้ระบบทราบถึงตัวรับสัญญาณการออกอากาศได้ 2 วิธี วิธีหนึ่งคือการประกาศในไฟล์ Manifest ด้วยองค์ประกอบนี้ อีกวิธีคือการสร้างตัวรับสัญญาณแบบไดนามิกในโค้ดและลงทะเบียนด้วยเมธอด Context.registerReceiver() หรือเวอร์ชันที่โอเวอร์โหลดเวอร์ชันใดเวอร์ชันหนึ่ง

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างตัวรับสัญญาณแบบไดนามิกได้ที่คำอธิบายคลาส BroadcastReceiver

หากตัวรับสัญญาณนี้จัดการการออกอากาศที่ไม่ใช่ระบบ ให้ระบุค่าสำหรับ android:exported ตั้งค่านี้เป็น "true" หากต้องการให้ตัวรับสัญญาณรับการออกอากาศจากแอปพลิเคชันอื่นๆ ได้ หรือ "false" หากต้องการให้ตัวรับสัญญาณรับการออกอากาศจากแอปของคุณเองเท่านั้น

คุณไม่จำเป็นต้องนำแอตทริบิวต์ android:permission ออกหากได้ประกาศไว้แล้ว

คำเตือน: จำกัดจำนวนตัวรับสัญญาณการออกอากาศที่คุณตั้งค่าไว้ในแอป การมีตัวรับสัญญาณการออกอากาศมากเกินไปอาจส่งผลต่อประสิทธิภาพของแอปและอายุการใช้งานแบตเตอรี่ของอุปกรณ์ของผู้ใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ API ที่คุณใช้แทนคลาส BroadcastReceiver สำหรับการกำหนดเวลาการทำงานเบื้องหลังได้ที่ การเพิ่มประสิทธิภาพเบื้องหลัง

แอตทริบิวต์:
android:directBootAware

ระบุว่าตัวรับสัญญาณการออกอากาศ รองรับการบูตโดยตรง หรือไม่ นั่น คือสามารถทำงานได้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์หรือไม่

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

ค่าเริ่มต้นคือ "false"

android:enabled
ระบุว่าระบบสร้างอินสแตนซ์ของตัวรับสัญญาณการออกอากาศได้หรือไม่ ค่าจะเป็น "true" หากสร้างได้ และ "false" หากสร้างไม่ได้ ค่าเริ่มต้นคือ "true"

องค์ประกอบ <application> มีแอตทริบิวต์ enabled ของตัวเองซึ่งใช้กับคอมโพเนนต์ทั้งหมดของ แอปพลิเคชัน รวมถึงตัวรับสัญญาณการออกอากาศ แอตทริบิวต์ <application> และ <receiver> ต้องมีค่าเป็น "true" ทั้งคู่สำหรับ เพื่อให้เปิดใช้ตัวรับสัญญาณการออกอากาศได้ หากแอตทริบิวต์ใดแอตทริบิวต์หนึ่งมีค่าเป็น "false" ตัวรับสัญญาณจะถูกปิดใช้และสร้างอินสแตนซ์ไม่ได้

android:exported
ระบุว่าตัวรับสัญญาณการออกอากาศรับข้อความจากแหล่งที่มาที่ไม่ใช่ระบบภายนอกแอปพลิเคชันได้หรือไม่ ค่าจะเป็น "true" หากรับได้ และ "false" หากรับไม่ได้ หากมีค่าเป็น "false" ตัวรับสัญญาณการออกอากาศจะได้รับเฉพาะข้อความที่ส่งโดยระบบ คอมโพเนนต์ของแอปพลิเคชันเดียวกัน หรือแอปพลิเคชันที่มีรหัสผู้ใช้เดียวกัน

หากไม่ได้ระบุ ค่าเริ่มต้นจะขึ้นอยู่กับว่าตัวรับสัญญาณการออกอากาศมีตัวกรอง Intent หรือไม่ หากตัวรับสัญญาณมีตัวกรอง Intent อย่างน้อย 1 รายการ ค่าเริ่มต้นจะเป็น "true" หากไม่มี ค่าเริ่มต้นจะเป็น "false"

แอตทริบิวต์นี้ไม่ใช่วิธีเดียวในการจำกัดการเข้าถึงภายนอกของตัวรับสัญญาณการออกอากาศ คุณยังใช้สิทธิ์เพื่อจำกัดเอนทิตีภายนอกที่ส่งข้อความไปยังตัวรับสัญญาณได้ด้วย ดูแอตทริบิวต์ permission

android:icon
ไอคอนที่แสดงถึงตัวรับสัญญาณการออกอากาศ แอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงไปยังทรัพยากร Drawable ที่มีคำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์ขององค์ประกอบ <application> icon

ไอคอนของตัวรับสัญญาณการออกอากาศ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือโดยองค์ประกอบ <application> ก็จะเป็น ไอคอนเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของตัวรับสัญญาณด้วย ดูแอตทริบิวต์ icon ขององค์ประกอบ <intent-filter>

android:intentMatchingFlags

ใช้แอตทริบิวต์นี้เพื่อปรับแต่งวิธีที่ระบบจับคู่ Intent ขาเข้ากับคอมโพเนนต์ของแอป โดยค่าเริ่มต้น ระบบจะไม่มีการใช้กฎการจับคู่พิเศษ

ค่าที่ตั้งไว้ในแท็ก <receiver> จะลบล้างค่าที่ตั้งไว้ในแท็ก <application>

ค่าต้องเป็นแฟล็กต่อไปนี้อย่างน้อย 1 รายการ โดยคั่นด้วย "|"

แฟล็ก คำอธิบาย
none ปิดใช้กฎการจับคู่พิเศษทั้งหมดสำหรับ Intent ขาเข้า เมื่อ ระบุแฟล็กหลายรายการ ระบบจะแก้ค่าที่ขัดแย้งกันโดยให้ความสำคัญกับแฟล็ก none
enforceIntentFilter

บังคับใช้การจับคู่ที่เข้มงวดขึ้นสำหรับ Intent ขาเข้า

  • Intent ที่ชัดเจนต้องตรงกับตัวกรอง Intent ของคอมโพเนนต์เป้าหมาย
  • Intent ที่ไม่มีการดำเนินการจะไม่ตรงกับตัวกรอง Intent ใดๆ
allowNullAction

ผ่อนปรนกฎการจับคู่เพื่ออนุญาตให้ Intent ที่ไม่มีการดำเนินการตรงกัน แฟล็กนี้ใช้ร่วมกับ enforceIntentFilter เพื่อให้ได้ลักษณะการทำงานต่อไปนี้

  • Intent ที่ชัดเจนต้องตรงกับตัวกรอง Intent ของคอมโพเนนต์เป้าหมาย
  • Intent ที่ไม่มีการดำเนินการจะตรงกับตัวกรอง Intent ใดก็ได้

ดูข้อมูลเพิ่มเติมได้ที่ส่วน Intent ที่ปลอดภัยยิ่งขึ้น ในการเปลี่ยนแปลงลักษณะการทำงานของ Android 16 (API ระดับ 36)

android:label
ป้ายกำกับที่ผู้ใช้อ่านได้สำหรับตัวรับสัญญาณการออกอากาศ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์ label ขององค์ประกอบ <application>

ป้ายกำกับของตัวรับสัญญาณการออกอากาศ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือโดยองค์ประกอบ <application> ก็จะเป็น ป้ายกำกับเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของตัวรับสัญญาณด้วย ดูแอตทริบิวต์ label ขององค์ประกอบ <intent-filter>

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

android:name
ชื่อของคลาสที่ใช้ตัวรับสัญญาณการออกอากาศ ซึ่งเป็นคลาสย่อยของ BroadcastReceiver นี่คือชื่อคลาสที่มีคุณสมบัติครบถ้วน เช่น "com.example.project.ReportReceiver" อย่างไรก็ตาม หากอักขระแรกของชื่อเป็นจุด เช่น ".ReportReceiver" ระบบจะต่อท้ายชื่อแพ็กเกจที่ระบุไว้ใน องค์ประกอบ <manifest>

เมื่อเผยแพร่แอปพลิเคชันแล้ว อย่า เปลี่ยนชื่อนี้ เว้นแต่คุณจะตั้งค่า android:exported="false"

ไม่มีค่าเริ่มต้น ต้องระบุชื่อ

android:permission
ชื่อของสิทธิ์ที่ผู้ออกอากาศต้องมีเพื่อส่งข้อความไปยังตัวรับสัญญาณการออกอากาศ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ สิทธิ์ที่ตั้งค่าโดย <application> แอตทริบิวต์ permission ขององค์ประกอบจะใช้ กับตัวรับสัญญาณการออกอากาศ หากไม่ได้ตั้งค่าแอตทริบิวต์ใดแอตทริบิวต์หนึ่ง ตัวรับสัญญาณจะไม่ได้รับการปกป้องด้วยสิทธิ์

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ ส่วนสิทธิ์ ในภาพรวมของ Manifest ของแอปและ เคล็ดลับด้านความปลอดภัย

android:process

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

แอตทริบิวต์ process ขององค์ประกอบ <application> สามารถตั้งค่า เริ่มต้นอื่นสำหรับคอมโพเนนต์ทั้งหมดได้ แต่คอมโพเนนต์แต่ละรายการสามารถลบล้างค่าเริ่มต้นด้วยแอตทริบิวต์ process ของตัวเอง ซึ่งช่วยให้คุณกระจายแอปพลิเคชันไปยังกระบวนการต่างๆ ได้

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

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

เปิดตัวใน:
API ระดับ 1