Một ý tưởng khác:
nếu bạn tạo một thông báo bình thường, bạn cũng cần thực hiện một, hai hoặc 3 trong số chúng. Tôi đã tạo một "NotifyManager", nó tạo ra tất cả các thông báo tôi cần và cũng nhận tất cả các cuộc gọi Intent. Vì vậy, tôi có thể quản lý tất cả các hành động VÀ cũng có thể nắm bắt sự kiện loại bỏ tại MỘT nơi.
public class NotifyPerformService extends IntentService {
@Inject NotificationManager notificationManager;
public NotifyPerformService() {
super("NotifyService");
...
}
@Override
public void onHandleIntent(Intent intent) {
notificationManager.performNotifyCall(intent);
}
để tạo deleteIntent, hãy sử dụng cái này (trong NotificationManager):
private PendingIntent createOnDismissedIntent(Context context) {
Intent intent = new Intent(context, NotifyPerformMailService.class).setAction("ACTION_NOTIFY_DELETED");
PendingIntent pendingIntent = PendingIntent.getService(context, SOME_NOTIFY_DELETED_ID, intent, 0);
return pendingIntent;
}
và RẰNG tôi sử dụng để đặt Ý định xóa như thế này (trong Trình quản lý thông báo):
private NotificationCompat.Builder setNotificationStandardValues(Context context, long when){
String subText = "some string";
NotificationCompat.Builder builder = new NotificationCompat.Builder(context.getApplicationContext());
builder
.setLights(ContextUtils.getResourceColor(R.color.primary) , 1800, 3500)
.setAutoCancel(true)
.setWhen(when)
.setVibrate(new long[]{1000, 1000})
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
.setSmallIcon(R.drawable.ic_white_24dp)
.setGroup(NOTIFY_GROUP)
.setContentInfo(subText)
.setDeleteIntent(createOnDismissedIntent(context))
;
return builder;
}
và cuối cùng trong cùng NotificationManager là chức năng thực hiện:
public void performNotifyCall(Intent intent) {
String action = intent.getAction();
boolean success = false;
if(action.equals(ACTION_DELETE)) {
success = delete(...);
}
if(action.equals(ACTION_SHOW)) {
success = showDetails(...);
}
if(action.equals("ACTION_NOTIFY_DELETED")) {
success = true;
}
if(success == false){
return;
}
}
builder.setAutoCancel(true);
khi người dùng nhấp vào thông báo và thông báo đó bị hủy hay không, xóa-Intent không được kích hoạt