如何在安卓系统中移除通知?

3
我正在开发一个应用程序,其中我接收多个通知。我成功地接收到具有不同数据的多个通知,但是当我使用setAutoCancel(true);来移除通知,并且我接收多个通知时,它只在通知栏上显示最后一个通知。问题在于,如果我删除setAutoCancel(true);方法,我可以成功地接收到多个通知,但是我想在多个通知的同时移除通知。 GcmIntentService.java:
public class GcmIntentService extends IntentService {
    Context context;

    //System.currentTimeMillis();

    private NotificationManager mNotificationManager;
    NotificationCompat.Builder builder;
    public static final String TAG = "GCM Demo";

    public GcmIntentService() {
        super("GcmIntentService");
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub
        Bundle extras = intent.getExtras();
        String msg = intent.getStringExtra("message");
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        String messageType = gcm.getMessageType(intent);


        if (!extras.isEmpty()) {

            if (GoogleCloudMessaging.
                    MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                sendNotification(RegIdDTO.REG_ID,"Send error: " +
                        extras.toString());
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_DELETED.equals(messageType)) {
                sendNotification(RegIdDTO.REG_ID,"Deleted messages on server: " +
                        extras.toString());
                // If it's a regular GCM message, do some work.
            } else if (GoogleCloudMessaging.
                    MESSAGE_TYPE_MESSAGE.equals(messageType)) {
                // This loop represents the service doing some work.
                for (int i=0; i<5; i++) {
                    Log.i(TAG, "Working... " + (i+1)
                            + "/5 @ " + SystemClock.elapsedRealtime());
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                    }
                }
                Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
                // Post notification of received message.
                //sendNotification("Received: " + extras.toString());
                sendNotification(RegIdDTO.REG_ID,msg);
                Log.i(TAG, "Received: " + extras.toString());
            }
        }
        GcmBroadcastReceiver.completeWakefulIntent(intent);
    }
    private void sendNotification(long when,String msg) {
        mNotificationManager = (NotificationManager)
                this.getSystemService(Context.NOTIFICATION_SERVICE);


        Intent myintent = new Intent(this, ReceiveActivity.class);
        myintent.putExtra("message", msg);
        myintent.setData(Uri.parse("content://"+when));

        PendingIntent contentIntent = PendingIntent.getActivity(this, 1,
                myintent, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_stat_gcm)
                .setContentTitle("Event tracker")
                .setContentText("Events received");
        Notification notification=mBuilder.build();


        AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);

        /* Even if the mode is set to "Sound & Vibration" in the phone, 
         * the status code that getRingerMode() returns is RINGER_MODE_NORMAL.
         */
        switch (am.getRingerMode())
        {
            case AudioManager.RINGER_MODE_VIBRATE:
                mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
                break;
            case AudioManager.RINGER_MODE_NORMAL:
                mBuilder.setDefaults(Notification.DEFAULT_SOUND);
                break;
            default:
                mBuilder.setDefaults(Notification.DEFAULT_SOUND);
        }

        mBuilder.setContentIntent(contentIntent);
        mBuilder.setAutoCancel(true);
        mNotificationManager.notify((int) when, mBuilder.build());

    }

    my receive activity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive);
        Intent intent = getIntent();


        name = (TextView) findViewById(R.id.name);
        deal = (TextView) findViewById(R.id.deal);
        valid = (TextView) findViewById(R.id.valid);
        address = (TextView)findViewById(R.id.address);
        String message = intent.getExtras().getString("message");
        try {
            json = new JSONObject(message);
            String stime = json.getString("name");
            name.setText(stime);

            String slecturename = json.getString("deal");
            deal.setText(slecturename);

            String sroom = json.getString("valid");
            valid.setText(sroom);

            String sfaculty = json.getString("address");
            address.setText(sfaculty);


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

2
你的问题是什么?是要移除通知还是显示多个通知? - Shayan Pourvatan
这里我的问题是显示多个通知,但如果我删除setAutoCancel(true);方法,我可以成功接收多个通知,但我想要删除具有多个通知的通知。 - Durga
它也是同样的问题。 - Durga
公共类 RegIdDTO { public static final int REG_ID= (int) Calendar.getInstance().getTimeInMillis(); } - Durga
请查看这个链接,这里有您所需要的解决方案 从通知栏中移除通知 - Muhammad Usman Ghani
显示剩余4条评论
1个回答

2
使用NotificationManager取消您的通知。您只需要提供通知ID。
mNotificationManager.cancel(YOUR_NOTIFICATION_ID);

嗯,我写得就是这样,但通知栏只显示一个通知。public void 取消通知(Context ctx) { String ns = Context.NOTIFICATION_SERVICE; NotificationManager nMgr = (NotificationManager) ctx
.getSystemService(ns); nMgr.cancel(RegIdDTO.REG_ID);}public class RegIdDTO { public static final int REG_ID= (int) Calendar.getInstance().getTimeInMillis(); }
- Durga
在接收活动中 @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); serv=new GcmIntentService(); serv.CancelNotification(getApplicationContext()); } - Durga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接