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

  • 用户可以接收多个通知,每个通知的动态ID均为int类型。
  • 选择通知后,它将加载显示相应消息(SMS)的 Activity 。
  • 应该自动取消选择的单个通知。

  • 我关于如何处理此问题的想法是使用putExtra将整数ID添加到该意图中,然后可以从其加载的 Activity 中的意图中访问它,然后将其调用的通知关闭。

    对于我的测试用例,以下是规范:
  • 通知最终将是
    暂时从服务生成
    他们是在测试时产生的
    用户按下一个按钮。
  • 选择通知后,
    所谓的 Activity toast 消息,
    然后尝试消除
    通知。 (为了
    能见度)

  • 这是我的问题:
  • 当第一个通知是
    选择,这是正确的。这
    通知被取消。
  • 当每个连续的通知是
    选择,第一个通知的
    显示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, 0, notificationIntent, 0 );
    
                my_notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent );
    
                mNotificationManager.notify( notify_id, my_notification );
            }
        }
    
    }
    

    最佳答案

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

    顺便说一句,它比您想象的要容易:

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

    my_notification.flags |= Notification.FLAG_AUTO_CANCEL;
    

    创建Notification时,将代码放在上面。

    10-01 02:22
    查看更多