Một mô tả của một hành động Ý định và mục tiêu để thực hiện với nó. Thể hiện của lớp này được tạo ra với
getActivity (android.content.Context, int, android.content.Intent, int), getActivities (android.content.Context, int, android.content.Intent [], int), getBroadcast (android.content.Context, int, android.content.Intent, int), getService (android.content.Context, int, android.content.Intent, int);
đối tượng trả lại có thể được giao cho các ứng dụng khác để chúng có thể thực hiện hành động mà bạn đã mô tả thay cho bạn sau này.
Bằng cách cấp PendingIntent cho ứng dụng khác, bạn đang cấp cho nó quyền thực hiện thao tác bạn đã chỉ định như thể ứng dụng khác của bạn (với cùng quyền và nhận dạng). Vì vậy, bạn nên cẩn thận về cách bạn tạo PendingIntent: hầu như luôn luôn, như Intent mà bạn cung cấp phải có tên thành phần được đặt rõ ràng thành một trong các thành phần của riêng bạn, để đảm bảo và không nơi nào khác.
Bản thân PendingIntent chỉ đơn giản là tham chiếu đến mã thông báo được duy trì bởi hệ thống mô tả dữ liệu gốc được sử dụng để truy xuất nó. Điều này có nghĩa là, ngay cả khi quá trình sở hữu của ứng dụng bị giết, bản thân PendingIntent sẽ vẫn có thể sử dụng được từ các quy trình khác đã được cung cấp.Nếu ứng dụng tạo sau này sẽ khôi phục cùng loại PendingIntent (cùng một thao tác, cùng một hành động, dữ liệu, danh mục và thành phần, và cùng cờ), nó sẽ nhận được một PendingIntent đại diện cho cùng một mã thông báo nếu đó vẫn là hợp lệ, và do đó có thể gọi cancel() để xóa nó.
Do hành vi này, điều quan trọng là phải biết khi nào hai Mục đích là được coi là giống nhau cho các mục đích truy xuất PendingIntent. Một sai lầm phổ biến mà mọi người tạo ra là tạo ra nhiều đối tượng PendingIntent PendingIntent có Intent chỉ thay đổi trong nội dung "phụ" của họ, mong đợi nhận được một PendingIntent khác nhau mỗi lần. Điều này không xảy ra với sự kiện . Các phần của Intent được sử dụng để đối sánh là cùng một phần được xác định bởi Intent.filterEquals. Nếu bạn sử dụng hai Intent các đối tượng tương đương với mỗi Intent.filterEquals, thì bạn sẽ nhận được cùng một PendingIntent cho cả hai đối tượng đó.
Có hai cách điển hình để giải quyết vấn đề này.
Nếu bạn thực sự cần nhiều khác biệt PendingIntent các đối tượng hoạt động cùng lúc (ví dụ như để sử dụng như hai thông báo rằng cả hai đều thể hiện cùng một lúc), sau đó bạn sẽ cần phải đảm bảo có một cái gì đó khác nhau về chúng để kết hợp chúng với các PendingIntents khác nhau. Đây có thể là bất kỳ thuộc tính Intent.filterEquals nào được xem xét bởi Intent.filterEquals hoặc khác nhau số nguyên mã yêu cầu được cung cấp cho getActivity (android.content.Context, int, android.content.Intent, int), getActivities (android.content. Ngữ cảnh, int, android.content.Intent [], int), getBroadcast (android.content.Context, int, android.content.Intent, int), hoặc getService (android.content.Context, int, android.content .Intent, int).
Nếu bạn chỉ cần một PendingIntent hoạt động tại một thời gian cho bất kỳ Intents bạn sẽ sử dụng, sau đó bạn có thể lựa chọn sử dụng cờ FLAG_CANCEL_CURRENT hoặc FLAG_UPDATE_CURRENT hoặc là hủy bỏ hoặc sửa đổi bất cứ điều gì PendingIntent hiện có liên quan đến tiếp cận mục đích bạn đang cung cấp .
Câu hỏi hay. Tôi biết điều này là không đúng. Nhưng, tôi đã sử dụng để hủy báo thức trước đó và khởi động lại nó khi tôi nghĩ rằng nó là cần thiết .. Tôi mong chờ câu trả lời của câu hỏi này. –
Tôi đoán chỉ mã requestCode của nó. Bạn không thể truy cập nguồn để kiểm tra? Android Studio thường hiển thị nó. – Stan