Отмена динамического уведомления в Android при выборе уведомления

Предположим, я создаю приложение для Android, подобное SMS-приложению. Требования следующие:

  1. Пользователь может получать несколько уведомлений, каждый из которых имеет динамический идентификатор типа int.
  2. Когда выбрано уведомление, он загружает действие, которое отображает соответствующее сообщение (SMS).
  3. Единственное уведомление, которое было выбрано, должно автоматически отклоняться.

Моя идея, как справиться с этим, заключалась в том, чтобы использовать putExtra для добавления идентификатора целого числа в намерение, которое затем будет доступно из намерения в рамках загружаемой им активности, которое затем отклонит уведомление, которое его вызвало.

Для моего теста, вот спецификации:

  1. Уведомления будут в конечном итоге генерироваться из службы, так как теперь они генерируются, когда тестовый пользователь нажимает кнопку.
  2. Когда уведомление выбрано, вызываемая активность тосты сообщения, а затем пытается отклонить уведомление. (Ради видимости)

Вот мои проблемы:

  1. Когда выбрано первое уведомление, оно является правильным. Уведомление отклоняется.
  2. Когда выбрано каждое последующее уведомление, отображается идентификатор первого уведомления, и ничто не отклоняется.
  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 ); } } } 

Когда активность когда-то создается, onCreate() метод onCreate() . В следующий раз, когда он отображается, метод не обязательно вызывается. Попробуйте onResume() код, который удаляет уведомление по onResume() . Ознакомьтесь с жизненным циклом деятельности.

И, кстати, это проще, чем вы думаете:

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

 my_notification.flags |= Notification.FLAG_AUTO_CANCEL; 

Поместите код выше при создании Notification .

Intereting Posts