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

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

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

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

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

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

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

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

}
7
задан Slobaum 23 August 2010 в 21:42
поделиться

1 ответ

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

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

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

my_notification.flags |= Notification.FLAG_AUTO_CANCEL;

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

16
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: