android之Notification的例子

来源:互联网 发布:java的命名规范 编辑:程序博客网 时间:2024/05/21 04:16

public class HelloActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello);
        clearNotification();
    }

    @Override
    protected void onStop() {
     showNotification();
     super.onStop();
    }
   
    @Override
    protected void onStart() {
     clearNotification();
     super.onStart();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.hello, menu);
        return true;
    }
   
    /**
     * 在状态栏显示通知
     */
    private void showNotification(){
        // 创建一个NotificationManager的引用  
        NotificationManager notificationManager = (NotificationManager)   
            this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);  
        
        // 定义Notification的各种属性(显示图标,提示文字,通知到达时间)  
        Notification notification =new Notification(R.drawable.ic_launcher,  
                "测试系统", System.currentTimeMillis());
       
        //FLAG_AUTO_CANCEL   该通知能被状态栏的清除按钮给清除掉
        //FLAG_NO_CLEAR      该通知不能被状态栏的清除按钮给清除掉
        //FLAG_ONGOING_EVENT 通知放置在正在运行
        //FLAG_INSISTENT     是否一直进行,比如音乐一直播放,知道用户响应
       
        notification.flags |= Notification.FLAG_ONGOING_EVENT; // 将此通知放到通知栏的"Ongoing"即"正在运行"组中  
        notification.flags |= Notification.FLAG_NO_CLEAR; // 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用  
        notification.flags |= Notification.FLAG_SHOW_LIGHTS;
       
        //DEFAULT_ALL     使用所有默认值,比如声音,震动,闪屏等等
        //DEFAULT_LIGHTS  使用默认闪光提示
        //DEFAULT_SOUNDS  使用默认提示声音
        //DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
        notification.defaults = Notification.DEFAULT_LIGHTS;       
        //叠加效果常量
        //notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;
       
        notification.ledARGB = Color.BLUE;
        notification.ledOnMS =5000; //闪光时间,毫秒
        
        // 设置通知的事件消息  
        CharSequence contentTitle ="测试系统标题"; // 通知栏标题  
        CharSequence contentText ="测试系统内容"; // 通知栏内容
       
        Intent notificationIntent =new Intent(HelloActivity.this, HelloActivity.class); // 点击该通知后要跳转的Activity  

        //PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags)

        //requestCode和flags都设置为0了,目前Android中还没有使用到requestCode来做什么控制,只是预留了这么一个参数方便于未来的扩展,

        //但是Flag能就非常有用了,因为系统会通过Flag来识别需要进行的行为。

        //目前在Android中有以下flag:

        //FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。

        //FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。

        //FLAG_ONE_SHOT:该PendingIntent只作用一次,如果该PendingIntent对象已经触发过一次,那么下次再获取该PendingIntent并且再触发时,

        //系统将会返回一个SendIntentException,在使用这个标志的时候一定要注意哦。

        //FLAG_UPDATE_CURRENT:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中

        //的Intent对象数据,例如更新Intent中的Extras。这个非常有用,例如之前提到的,我们需要在每次更新之后更新Intent中的Extras数据,

        //达到在不同时机传递给MainActivity不同的参数,实现不同的效果。
        PendingIntent contentItent = PendingIntent.getActivity(this, 0, notificationIntent, 0);  
        notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);  
        
        // 把Notification传递给NotificationManager (1为id,要唯一) 
        notificationManager.notify(1, notification);  
    }
   
    //删除通知   
    private void clearNotification(){
        // 启动后删除之前我们定义的通知  
        NotificationManager notificationManager = (NotificationManager) this
                .getSystemService(NOTIFICATION_SERVICE);
       
        notificationManager.cancel(1);
    }
   
}