Thông báo không được ứng dụng của bạn quản lý và tất cả những thứ như hiển thị thông báo và xóa chúng đều thực sự xảy ra trong một quy trình khác. Bạn không thể làm cho ứng dụng khác trực tiếp thực thi một đoạn mã chỉ vì lý do bảo mật.
Khả năng duy nhất trong trường hợp của bạn là cung cấp PendingIntent
, chỉ cần bao quanh một Mục đích thông thường và sẽ được bắt đầu thay mặt cho ứng dụng của bạn khi thông báo bị xóa. Bạn cần sử dụng PendingIntent
để gửi phát hoặc bắt đầu một dịch vụ và sau đó thực hiện những gì bạn muốn trong bộ thu sóng hoặc trong dịch vụ. Những gì chính xác để sử dụng phụ thuộc vào từ thành phần ứng dụng bạn đang hiển thị thông báo.
Trong trường hợp bộ thu phát, bạn chỉ có thể tạo lớp bên trong ẩn danh cho bộ thu phát sóng và đăng ký nó động trước khi hiển thị thông báo. Nó sẽ trông giống như thế:
public class NotificationHelper {
private static final String NOTIFICATION_DELETED_ACTION = "NOTIFICATION_DELETED";
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
aVariable = 0; // Do what you want here
unregisterReceiver(this);
}
};
public void showNotification(Context ctx, String text) {
Intent intent = new Intent(NOTIFICATION_DELETED_ACTION);
PendingIntent pendintIntent = PendingIntent.getBroadcast(ctx, 0, intent, 0);
registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
Notification n = new Notification.Builder(mContext).
setContentText(text).
setDeleteIntent(pendintIntent).
build();
NotificationManager.notify(0, n);
}
}
Nguồn
2012-10-23 12:00:14
Tôi đang thử điều này với intentService. Nhận được một người nhận ý định ngoại lệ bị rò rỉ. "Bạn có bỏ lỡ cuộc gọi đến unregisterReceiver không?" Bất cứ ai có thể ném bất kỳ ánh sáng vào nó? – Yasir
Đăng ký và hủy đăng ký Người nhận phải gọi từ ngữ cảnh không được chú ý, do đó, sử dụng getApplicationContext() trong intentService của bạn sẽ giải quyết vấn đề của bạn. – smora
Tôi khuyên bạn nên đăng ký bộ thu tĩnh (ví dụ: được đăng ký trong AndroidManifest), vì ứng dụng có thể bị hủy vào thời điểm người dùng loại bỏ thông báo. Bộ thu tĩnh đảm bảo rằng mã sẽ được thực thi ngay cả khi ứng dụng đã chết. – pepyakin