选择通知时,在Android中取消动态通知

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

>用户可以接收多个通知,每个通知都具有int类型的动态ID.
>选择通知后,它会加载显示相应消息(SMS)的活动.
>应自动取消选中的单个通知.

我对如何处理这个问题的想法是使用putExtra将整数ID添加到intent中,然后可以从它加载的活动中的intent中访问它,然后它会关闭调用它的通知.

对于我的测试用例,这里是规格:

>通知最终会
从现在开始,从服务生成
他们正在测试时产生
用户按下按钮.
>选择通知时,
被称为活动的消息,
然后试图解雇
通知. (为了
能见度)

这是我的问题:

>第一次通知时
选中,这是对的.该
通知被驳回.
>每次连续通知时
选中,第一个通知
ID显示,没有
驳回.
>我是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,notificationIntent,0 );

            my_notification.setLatestEventInfo( context,contentTitle,contentText,contentIntent );

            mNotificationManager.notify( notify_id,my_notification );
        }
    }

}

解决方法

当活动一旦创建,就会调用onCreate()方法.下次显示时,不一定要调用该方法.尝试将删除通知的代码移动到onResume()方法.熟悉活动生命周期.

顺便说一下,它比你想象的容易:

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

my_notification.flags |= Notification.FLAG_AUTO_CANCEL;

创建通知时,请输入上面的代码.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...