在select通知时,取消Android中的dynamic通知

假设我正在创build一个类似SMS应用程序的Android应用程序。 要求如下:

  1. 用户可以接收多个通知,每个通知都有一个inttypes的dynamicID。
  2. select通知后,会加载显示相应消息(SMS)的活动。
  3. 被选中的单个通知应该被自动解除。

我关于如何处理这个问题的想法是使用putExtra将整数ID添加到意图,然后可以从它加载的活动内部的意图访问,然后这会消除调用它的通知。

对于我的testing案例,这里是规格:

  1. 通知最终将从服务中生成,现在,当testing用户按下一个button时,会生成通知。
  2. 当select通知时,被叫活动为消息提供消息,然后试图解除通知。 (为了能见度)

这是我的问题:

  1. 当select第一个通知时,它是正确的。 通知被驳回。
  2. 当每个连续的通知被选中,第一个通知的ID被显示,并且什么都不被解雇。
  3. 我是一个Java新手,更习惯于脚本语言(如Perl,PHP等):)

这是我的来源:

<?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 ); } } } 

活动一旦创build,就会调用onCreate()方法。 下次显示的方法不一定叫。 尝试移动删除通知到onResume()方法的代码。 熟悉活动生命周期。

顺便说一句,比你想象的更容易:

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

 my_notification.flags |= Notification.FLAG_AUTO_CANCEL; 

创buildNotification时将上面的代码。