एक अन्य विचार:
यदि आप एक अधिसूचना बनाते हैं तो आपको सामान्य रूप से उनमें से एक, दो या 3 क्रियाओं की आवश्यकता होती है। मैंने एक "NotifyManager" बनाया है, यह मेरी ज़रूरत की सभी सूचनाएं बनाता है और सभी इंटेंट कॉल भी प्राप्त करता है। इसलिए मैं सभी कार्यों का प्रबंधन कर सकता हूं और एक स्थान पर बर्खास्तगी की घटना को भी पकड़ सकता हूं।
public class NotifyPerformService extends IntentService {
@Inject NotificationManager notificationManager;
public NotifyPerformService() {
super("NotifyService");
...
}
@Override
public void onHandleIntent(Intent intent) {
notificationManager.performNotifyCall(intent);
}
डिलीट को बनाने के लिए इसे उपयोग करें (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;
}
और मुझे इस तरह से हटाने की अधिसूचना सेट करने के लिए उपयोग करना है (अधिसूचना प्रबंधक में):
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;
}
और अंत में एक ही अधिसूचना प्रबंधक में प्रदर्शन कार्य है:
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);
किसी उपयोगकर्ता द्वारा अधिसूचना पर क्लिक करने पर