android清除通知栏消息

   这近项目快到结尾了,经理要我处理一个问题,就是我们程序关闭后,程序发出通知 在状态栏上始终没有消除,需要手动的清楚,

体验效果极其不好,现在是想在程序推出后,把通知给消除了,琢磨了下,不知怎么清楚,看了下api 有清除的方法,后面安心多了

,但有出现毛病了,我什么调用通知管理器把通知消除啊,他是开一个一个服务中的,我们不能new 这个类,是系统的,当时想了下

决定发送广播清楚, 当程序退出的时候,调用该广播把消息清楚,等到快写完的时候,才发现,既然是系统调用的,系统肯定有结束的回调啊

立马想到了 ondesory()方法,因为我程序不管怎么退出,都会调用该方法,而且省了我很大的一笔功夫,代码也就一行!

 

写这个只想告诉自己,在应用系统的东西时候,我们应该遵循系统的规则进行游戏,该创建的时候就要创建,该释放的地方就要释放!

看来对系统的生命周期认识还不是很到位啊!

  说了这么多废话 ,也贴上测试代码 ,随便写的

package com.liao.notification;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Base64;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
	private int type ;
	private String message ;
	private NotificationManager notiManager;
	
	Handler handler = new Handler(){
		
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if(msg.what ==1){
				message = "type ====1";
				
			}else if (msg.what == 2){
				message = "type ====2";
			}
			notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
			Notification notification = new Notification(R.drawable.icon,
					"您有新消息" + type, System.currentTimeMillis());
			Intent intent = new Intent();
			intent.setClass(getApplicationContext(), ReciveActivity.class);
			intent.putExtra("hello", "hello Dialog");
			intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
					| Intent.FLAG_ACTIVITY_NEW_TASK);

			PendingIntent pendingIntent = PendingIntent.getActivity(
					getApplicationContext(), 100, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);
			notification.setLatestEventInfo(getApplicationContext(), type + "",
					message, pendingIntent);
			notiManager.notify(0, notification);
			
		}
	};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        LinearLayout layout = new LinearLayout(this);

		Button button = new Button(this);
		button.setText("测试notification1");
		button.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				type = 1;
				handler.sendEmptyMessage(1);
			}
		});
		Button button2 = new Button(this);
		button2.setText("测试notification2");
		button2.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				//        		handler.sendEmptyMessage(2);
				//        		type= 2;
				notiManager.cancel(0);// 调用他就行 这个0 和notiManager创建时候传入的0 是唯一的 ,所以可以根据他删除

			}
		});
		layout.addView(button);
		layout.addView(button2);
		setContentView(layout);
        
    }
}


 

你可能感兴趣的:(android)