Cancel dynamic notification in Android when notification is selected

Suppose I am creating an Android application similar to an SMS application. The requirements are as follows:

  • A user can receive several notifications, each of which has a dynamic identifier of type int.
  • When a notification is selected, it downloads an activity that displays the corresponding message (SMS).
  • The only notification that was selected should be automatically rejected.

My idea of ​​how to handle this was to use putExtra to add an integer identifier to the intent, which would then be available from the intent as part of the activity it loads, which would then reject the notification that caused it.

For my test case, here are the specifications:

  • Ultimately, notifications are created from the service, at the moment they appear when the test user clicks a button.
  • When a notification is selected, triggered activity toasts a message, then attempts to reject the notification. (In the name of visibility)

Here are my problems:

  • When the first notification is selected, this is correct. notification rejected.
  • When each subsequent notification is selected, the first notification is an Identifier, and nothing is displayed fired.
  • I am a Java beginner, more familiar with scripting languages ​​(e.g. Perl, PHP, etc.) :)

Here is my source:

<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > <Button android:id="@+id/create_notification" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:text = "Create new notification" /> 

 package org.test.notifydemo; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.Random; public class aRunNotificationDemo extends Activity { private NotificationManager mNotificationManager; @Override public void onCreate( Bundle icicle ) { super.onCreate( icicle ); setContentView( R.layout.run_notify_demo ); mNotificationManager = (NotificationManager) getSystemService( aRunNotificationDemo.NOTIFICATION_SERVICE ); int close_notify_id = getIntent().getIntExtra( "notification_id", 0 ); if ( close_notify_id != 0 ) { Toast.makeText( aRunNotificationDemo.this, "Dimissing this notification: " + Integer.toString(close_notify_id), Toast.LENGTH_SHORT ).show(); mNotificationManager.cancel( close_notify_id ); } findViewById( R.id.create_notification ).setOnClickListener( new MyButtonListener() ); } private class MyButtonListener implements Button.OnClickListener { public void onClick( View my_view ) { Random randGen = new Random(); int notify_id = randGen.nextInt(); int icon = R.drawable.icon_notification_01; CharSequence tickerText = Integer.toString(notify_id) + " New SMS!"; long when = System.currentTimeMillis(); Notification my_notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = Integer.toString(notify_id) + " New SMS Available!"; CharSequence contentText = Integer.toString(notify_id) + " There is a new SMS available."; Intent notificationIntent = new Intent( aRunNotificationDemo.this, aRunNotificationDemo.class ); notificationIntent.putExtra( "notification_id", notify_id ); PendingIntent contentIntent = PendingIntent.getActivity( aRunNotificationDemo.this, 0, notificationIntent, 0 ); my_notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent ); mNotificationManager.notify( notify_id, my_notification ); } } } 
+7
android android-intent notifications
source share
1 answer

When an action is created once, its onCreate() method is onCreate() . The next time it is displayed, the method is not necessarily called. Try moving code that removes the notification using the onResume() method. Familiarize yourself with the life cycle of an activity.

And by the way, this is easier than you think:

http://developer.android.com/reference/android/app/Notification.html#FLAG_AUTO_CANCEL

 my_notification.flags |= Notification.FLAG_AUTO_CANCEL; 

Put the code above when creating Notification .

+16
source share

All Articles