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 ); } } }
android android-intent notifications
Slobaum
source share