• android开发之Notification学习笔记


    今天总结了一下Notification的使用,与大家分享一下。
    MainActivity.java:

    本文参考:http://www.jb51.net/article/36567.htmhttp://www.cnblogs.com/linjiqin/archive/2011/12/14/2288074.html

    public class MainActivity extends Activity {
    
        private Button btn;
        private NotificationManager manager;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    //      showNotification();
    //      showNotification2();
    //      showNotification3();
    //      showNotification4();
    //      showNotification5();
            showNotification6();
            this.btn = (Button) this.findViewById(R.id.button1);
            this.btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    clearNotification();
                }
            });
        }
        /**
         * 自定义Notification布局
         */
        private void showNotification6() {
            RemoteViews remoteViews = new RemoteViews(getPackageName(),
                    R.layout.custom_notification);
            Intent intent = new Intent(this, SecondActivity.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
                    intent, 0);
            //点击时给SecondActivity发送一条广播
            remoteViews.setOnClickPendingIntent(R.id.paly_pause_music,
                    pendingIntent);
            Intent intent1 = new Intent(this,SecondActivity.class);
            remoteViews.setOnClickPendingIntent(R.id.paly_pause_music, PendingIntent.getActivity(this, 0, intent1, 0));
            NotificationCompat.Builder builder = new Builder(this);
            builder.setContent(remoteViews).setSmallIcon(R.drawable.ic_launcher)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)).setOngoing(true)
                    .setTicker("music is playing");
            manager.notify(0, builder.build());
        }
        /**
         * 大布局Picture类型notification
         * 这个方法貌似还有一点问题
         */
        private void showNotification5() {
            NotificationCompat.BigPictureStyle pictureStyle = new BigPictureStyle();
            pictureStyle.setBigContentTitle("BigContentTitle")
            .setSummaryText("Summary Text").bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
            Notification notification = new NotificationCompat.Builder(this)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
            .setTicker("showBigView_pic").setContentInfo("ContentInfo")
            .setContentTitle("ContentTitle").setContentText("ContentText")
            .setStyle(pictureStyle)
            .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
            .build();
            manager.notify(3, notification);
        }
        /**
         * 带进度条的通知栏
         */
        private void showNotification4() {
            final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
            .setSmallIcon(R.drawable.ic_launcher)
            .setTicker("showProgressBar")
            .setContentInfo("ContentInfo")
            .setOngoing(true)
            .setContentTitle("ContentTitle")
            .setContentText("ContentText");
            new Thread(new Runnable() {
    
                @Override
                public void run() {
                    int progress = 0;
                    for(progress=0;progress<100;progress+=5){
                        //将第三个参数改为true,进度条会变为无明显进度的样式
                        builder.setProgress(100, progress, true);
                        manager.notify(0, builder.build());
                        try {
                            Thread.sleep(1000);
                        } catch (Exception e) {
                        }
                    }
                    //线程执行完毕之后,修改通知栏的显示
                    builder.setContentTitle("Download complete").setProgress(0, 0, false).setOngoing(false);
                    manager.notify(0, builder.build());
                }
            }).start();
    
        }
        /**
         * 大通知栏
         */
        private void showNotification3() {
            NotificationCompat.BigTextStyle textStyle = new BigTextStyle();
            textStyle.setBigContentTitle("BigContentTitle")
            .setSummaryText("Summary Text")
            .bigText("I'm Big Text......................................................................");
            Notification notification = new NotificationCompat.Builder(this)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
            .setSmallIcon(R.drawable.ic_launcher)
            .setTicker("Ticker")
            .setContentInfo("ContentInfo")
            .setContentTitle("ContentTitle")
            .setContentText("ContentText")
            .setStyle(textStyle)
            .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).build();
            manager.notify(0, notification);
        }
        /**
         * 小通知栏
         */
        private void showNotification2() {
            Notification notification = new NotificationCompat.Builder(this)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
            .setSmallIcon(R.drawable.ic_launcher)
            .setTicker("showNormal")
            .setContentInfo("ContextInfo")
            .setContentTitle("ContentTitle")
            .setContentText("ContentText")
            .setNumber(45)
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .build();
            Intent notificationIntent =new Intent(MainActivity.this, SecondActivity.class);
            PendingIntent contentItent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
            notification.contentIntent=contentItent;
            manager.notify(0, notification);
        }
        /**
         * 在状态栏显示通知
         */
        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_AUTO_CANCEL;
            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(MainActivity.this, SecondActivity.class); // 点击该通知后要跳转的Activity   
            PendingIntent contentItent = PendingIntent.getActivity(this, 0, notificationIntent, 0);   
            notification.setLatestEventInfo(this, contentTitle, contentText, contentItent);   
    
            // 把Notification传递给NotificationManager   
            notificationManager.notify(0, notification);   
        }
        //删除通知    
        private void clearNotification(){
            // 启动后删除之前我们定义的通知   
            NotificationManager notificationManager = (NotificationManager) this 
                    .getSystemService(NOTIFICATION_SERVICE);   
            notificationManager.cancel(0);  
    
        }
    }

    关键代码文中已有注释,完整代码下载。如有错误之后欢迎大家一起讨论。

    版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

  • 相关阅读:
    Vue.2.0.5-混合
    Vue.2.0.5-自定义指令
    Vue.2.0.5-过渡状态
    Vue.2.0.5-深入响应式原理
    spring mvc + mybatis + spring aop声明式事务管理没有作用
    Spring注解@Component、@Repository、@Service、@Controller区别
    继承之后的使用注意事项_ArrayStoreException
    java 中打印调用栈
    禁止 favicon.ico 请求
    mysq时间戳最小值
  • 原文地址:https://www.cnblogs.com/lenve/p/4770540.html
Copyright © 2020-2023  润新知