- 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>
- nội dung 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 cho phép ứng dụng nhận được ý định mà 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ó hai cách để cho hệ thống biết về broadcast receiver: Một là khai báo phần tử này trong tệp kê khai. Hai là tạo receiver động ở dạng mã và đăng ký bằng phương thức
Context.registerReceiver()
. Bạn cũng có thể sử dụng các phiên bản quá tải của tin do hệ thống truyền ra: (receiver, bộ lọc) hoặc tin do ứng dụng truyền ra: (broadcast receiver, bộ lọc, cờ). Để biết thêm thông tin về cách tạo receiver động, hãy xem phần mô tả lớpBroadcastReceiver
.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ànhtrue
nếu bạn muốn receiver nhận tin từ các ứng dụng khác hoặcfalse
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. 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 công việc trên nền, hãy xem phần Tối ưu hoá nền. - thuộc tính:
android:directBootAware
Broadcast receiver có nhận biết việc khởi động trực tiếp hay không; nghĩa là, broadcast receiver có thể chạy trước khi người dùng mở khoá thiết bị hay không.
Lưu ý: Trong phương thức Direct Boot (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
- Hệ thống có thể bắt đầu tạo bản sao của broadcast receiver hay không:
"
true
" nếu là có và "false
" nếu là không. 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 một trong hai thuộc tính là "false
", thì broadcast receiver đó sẽ bị tắt và không thể tạo bản sao. android:exported
- Broadcast receiver có thể nhận thông báo từ nguồn không phải hệ thống
bên ngoài ứng dụng hay không: "
true
" nếu là có và "false
" nếu là không. Nếu là "false
" thì tin duy nhất mà broadcast receiver có thể nhận được là tin do hệ thống, các thành phần của cùng ứng dụng hoặc ứng dụng có cùng mã nhận dạng người dùng gửi tớ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 receiver có 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 nào có quyền 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 phải được thiết lập dưới dạng tham chiếu đến một tài nguyên có thể vẽ trong đó có chứa phần định nghĩa cho hình ảnh.
Nếu bạn không đặt chính sách này, hệ thống sẽ sử dụng biểu tượng đã chỉ định cho toàn bộ ứng dụng (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 (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 cho toàn bộ ứng dụng
sẽ được sử dụng (xem thuộc tính
label
của phần tử<application>
).Nhãn của broadcast receiver – bất kể đượ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 (xem thuộc tínhlabel
của phần tử<intent-filter>
).Bạn phải đặt nhãn dưới dạng thông tin tham chiếu đến tài nguyên chuỗi thì mới có thể bản địa hoá nhãn như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện cho bạn trong quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn dưới dạng một chuỗi thô (raw string).
android:name
- Tên của lớp triển khai broadcast receiver, lớp con của
BroadcastReceiver
. Đây phải là tên lớp đủ điều kiện (ví dụ: "com.example.project.ReportReceiver
"). Tuy nhiên, do là tên viết tắt nên nếu ký tự đầu tiên của tên lớp là dấu chấm (ví dụ: ". ReportReceiver
"), thì tên này được thêm vào tên gói được chỉ định trong phần tử<manifest>
.Sau khi phát hành ứng dụng, bạn không nên 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 quyền mà trình phát phải gửi
thông báo đến 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 quyền bảo vệ.Để biết thêm thông tin về các quyền, hãy xem mục Quyền trong phần giới thiệu cũng như xem tài liệu riêng về Bảo mật và quyền.
android:process
- Tên của quy trình mà broadcast receiver sẽ chạy.
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ả 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 được gán cho thuộc tính này bắt đầu bằng dấu hai chấm (":"), thì 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 ký tự viết thường, thì receiver sẽ chạy trong quy trình chung có tên đó, miễn là receiver có quyền làm như vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung cùng một quy trình, giúp giảm lượng sử dụng tài nguyên.
- lần đầu xuất hiện:
- 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: 2023-01-03 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Thiếu thông tin tôi cần"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Quá phức tạp/quá nhiều bước"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Đã lỗi thời"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Vấn đề về bản dịch"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Vấn đề về mẫu/mã"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Khác"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Dễ hiểu"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Giúp tôi giải quyết được vấn đề"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Khác"
}]