Intereting Posts
Facebook Login на PhoneGap, ничего не происходит Как получить размер экрана устройства? Как я могу изменить разрешения на чтение / запись в папке / mnt / SDcard на Kindle Fire? Android: Как я могу перейти от одной «детали» к другой «детали», а кнопка «Вверх» вернется в список «Мастер»? Завершение текущей активности из фрагмента Android в проблемах с покупкой приложений Макет представления не обновляется при изменении ориентации в android Исключить экран xLarge для версии Android SDK 2.1 Время назад на Android Есть ли какой-либо надежный способ справиться с аутентификацией Windows (NTLM) от приложения Android? Android sqlite: Не удалось изменить локаль для db в 'zh_CN' Подпрограмма Spinner Изменение цвета фона в ListView отключает цвет подсветки Получение файлов с SD-карты в эмуляторе ICS После отключения приложения Google Диском Android API по-прежнему возвращает успешные результаты, но не загружает файл

Отмена динамического уведомления в 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 .