- cú pháp:
<receiver android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string" > ... </receiver>
- có trong:
<application>
- có thể chứa:
<intent-filter>
<meta-data>
- mô tả:
- Khai báo một broadcast receiver (lớp con của
BroadcastReceiver
) làm một trong các thành phần của ứng dụng. Broadcast receiver giúp ứng dụng nhận được ý định do hệ thống hoặc ứng dụng khác truyền đi, ngay cả khi các thành phần khác của ứng dụng không chạy.Có 2 cách để hệ thống nhận biết được broadcast receiver. Một là khai báo trong tệp kê khai bằng phần tử này. Hai là tạo receiver một cách linh động ở dạng mã và đăng ký bằng phương thức
Context.registerReceiver()
hoặc một trong các phiên bản quá tải.Để biết thêm thông tin về cách tạo receiver một cách linh động, hãy xem phần mô tả của lớp
BroadcastReceiver
.Nếu receiver này xử lý các tin không phải do hệ thống truyền ra, hãy chỉ định một giá trị cho
android:exported
. Đặt giá trị này thành"true"
nếu bạn muốn receiver nhận tin từ các ứng dụng khác hoặc là"false"
nếu bạn chỉ muốn receiver nhận tin từ chính ứng dụng của bạn.Bạn không cần xoá thuộc tính
android:permission
nếu đã khai báo thuộc tính này.Cảnh báo: Hãy giới hạn số lượng broadcast receiver bạn đặt trong ứng dụng của mình. Việc có quá nhiều broadcast receiver có thể ảnh hưởng đến hiệu suất của ứng dụng cũng như thời lượng pin của thiết bị của người dùng. Để biết thêm thông tin về API mà bạn có thể sử dụng thay cho lớp
BroadcastReceiver
nhằm lập lịch biểu cho công việc ở chế độ nền, hãy xem bài viết Tối ưu hoá ở chế độ nền. - thuộc tính:
android:directBootAware
Liệu broadcast receiver có nhận biết được quá trình Khởi động trực tiếp (Direct-Boot) hay không, tức là broadcast receiver có thể chạy trước khi người dùng mở khoá thiết bị không.
Lưu ý: Trong quá trình Khởi động trực tiếp, broadcast receiver trong ứng dụng của bạn chỉ có thể truy cập dữ liệu được lưu trữ trong bộ nhớ được bảo vệ của thiết bị.
Giá trị mặc định là
"false"
.android:enabled
- Liệu hệ thống có thể tạo thực thể cho broadcast receiver này hay không. Giá trị này sẽ là
"true"
nếu hệ thống có thể và là"false"
nếu hệ thống không thể. Giá trị mặc định là"true"
.Phần tử
<application>
có thuộc tínhenabled
riêng áp dụng cho tất cả thành phần của ứng dụng, bao gồm cả broadcast receiver. Cả hai thuộc tính<application>
và<receiver>
phải là"true"
thì mới có thể bật broadcast receiver. Nếu là"false"
, broadcast receiver sẽ bị tắt và không thể tạo thực thể. android:exported
- Liệu broadcast receiver có thể nhận thông báo từ các nguồn không phải hệ thống ở bên ngoài ứng dụng hay không. Giá trị này sẽ là
"true"
nếu có thể và"false"
nếu không thể. Nếu là"false"
, thì thông báo duy nhất mà broadcast receiver nhận được là các thông báo do hệ thống, các thành phần của cùng một ứng dụng hoặc các ứng dụng có cùng mã nhận dạng người dùng gửi.Nếu không chỉ định, thì giá trị mặc định sẽ tuỳ thuộc vào việc broadcast receiver có chứa bộ lọc ý định hay không. Nếu broadcast receiver chứa ít nhất một bộ lọc ý định, thì giá trị mặc định sẽ là
"true"
. Nếu không, giá trị mặc định sẽ là"false"
.Thuộc tính này không phải là cách duy nhất để hạn chế việc tiếp xúc bên ngoài của broadcast receiver. Bạn cũng có thể sử dụng quyền để giới hạn các thực thể bên ngoài có thể gửi thông báo cho broadcast receiver. Xem thuộc tính
permission
. android:icon
- Biểu tượng đại diện cho broadcast receiver. Thuộc tính này được đặt ở dạng tham chiếu đến một tài nguyên có thể vẽ có chứa định nghĩa hình ảnh.
Nếu bạn không đặt thuộc tính này, thì hệ thống sẽ sử dụng biểu tượng được chỉ định cho toàn bộ ứng dụng. Hãy xem thuộc tính
icon
của phần tử<application>
.Biểu tượng của broadcast receiver, bất kể được đặt ở đây hay do phần tử
<application>
đặt, cũng đều là biểu tượng mặc định cho tất cả các bộ lọc ý định của receiver. Hãy xem thuộc tínhicon
của phần tử<intent-filter>
. android:label
- Nhãn mà người dùng đọc được cho broadcast receiver. Nếu bạn không đặt thuộc tính này, thì nhãn được đặt chung cho ứng dụng sẽ được dùng. Hãy xem thuộc tính
label
của phần tử<application>
.Nhãn của broadcast receiver, cho dù được đặt ở đây hay do phần tử
<application>
đặt, cũng đều là nhãn mặc định cho tất cả các bộ lọc ý định của receiver. Hãy xem thuộc tínhlabel
của phần tử<intent-filter>
.Nhãn được đặt ở dạng tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện cho quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn này làm chuỗi thô.
android:name
- Tên của lớp triển khai broadcast receiver, lớp con của
BroadcastReceiver
. Tên này là tên lớp đủ điều kiện, chẳng hạn như"com.example.project.ReportReceiver"
. Tuy nhiên, ở dạng viết tắt, nếu ký tự đầu tiên của tên là một dấu chấm, chẳng hạn như".ReportReceiver"
, thì hệ thống sẽ nối thêm tên gói được chỉ định trong phần tử<manifest>
.Một khi bạn đã phát hành ứng dụng thì đừng thay đổi tên này, trừ trường hợp bạn đặt
android:exported="false"
.Không có giá trị mặc định. Bạn phải chỉ định tên.
android:permission
- Tên của một quyền mà đài phát cần có để gửi thông báo cho broadcast receiver.
Nếu bạn không đặt thuộc tính này, thì quyền do thuộc tính
permission
của phần tử<application>
đặt sẽ áp dụng cho broadcast receiver. Nếu bạn không đặt thuộc tính nào, thì receiver sẽ không được bảo vệ bởi quyền.Để biết thêm thông tin về các quyền, hãy xem phần Quyền trên trang tổng quan về tệp kê khai ứng dụng và bài viết Mẹo bảo mật.
android:process
- Tên của quy trình mà broadcast receiver chạy trong đó.
Thường thì tất cả thành phần của ứng dụng sẽ chạy trong quy trình mặc định được tạo cho ứng dụng. Quy trình này có cùng tên với gói ứng dụng.
Thuộc tính
process
của phần tử<application>
có thể đặt một giá trị mặc định khác cho tất cả các thành phần. Tuy nhiên, mỗi thành phần có thể ghi đè giá trị mặc định bằng thuộc tínhprocess
riêng, cho phép bạn trải rộng ứng dụng của mình trên nhiều quy trình.Nếu tên gán cho thuộc tính này bắt đầu bằng dấu hai chấm (
:
), thì một quy trình mới (dành riêng cho ứng dụng) sẽ được tạo khi cần và broadcast receiver sẽ chạy trong quy trình đó.Nếu tên quy trình bắt đầu bằng một ký tự viết thường, thì receiver sẽ chạy trong một quy trình chung của tên đó, miễn receiver có quyền làm vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung một quy trình, qua đó giúp giảm mức sử dụng tài nguyên.
- ra mắt từ:
- API cấp 1
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2024-08-22 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2024-08-22 UTC."],[],[]]