zoukankan      html  css  js  c++  java
  • 从零开始学android -- notification通知

    目前有三种通知

    第一种是普通通知

    看看效果

    布局什么的太简单了我就不放在上面了给你们看核心的代码就行了 里面的   int notificationID = 1;

    //设置点击通知后的意图
            Intent intent = new Intent(this,NotificationView.class);
            intent.putExtra("notificationID",notificationID);
            //塞入pendingIntent  参数解释:1.上下文也就是context 2.请求码(用于意图的请求码) 3.意图(用来启动目标活动的意图) 4.标志(活动启动时使用的标志)
            PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
            //获取系统的notification管理服务
            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    
            //现在官方推荐用builder的方式构建Notification,原来是new的方式已经淘汰了。
            Notification.Builder builder = new Notification.Builder(this);
            //收到通知时最顶部显示的信息
            builder.setSmallIcon(R.mipmap.ic_launcher);
            builder.setTicker("Reminder:Meeting starts in 5 minutes");
            builder.setWhen(System.currentTimeMillis());
    
            //下拉顶部看到的详细通知信息 图标通用的
            builder.setContentTitle("System Alarm"); //设置标题
            builder.setContentText("Meeting with customer at 3pm.."); //设置内容
            //设置通知被点击后的意图处理也就是打开某个activity
            //至于为什么要用pendingIntent ,因为PendingIntent对象可以代表应用程序帮助您在后面的某个时候执行一个动作,而“不用考虑应用程序是否正在运行”
            builder.setContentIntent(pendingIntent);
            builder.setDefaults(Notification.DEFAULT_SOUND); //设置默认的声音和震动
            //当然你也可以自定义设置震动
    //        builder.setVibrate(new long[]{100,250,100,500}); //设置震动
            builder.setAutoCancel(true);//设置点击后自动消失也就是取消显示  true:点击后消失;false:点击后不消失;默认是false
            Notification notif = builder.build(); //构建 这里注意build方法最低支持minSdkVersion 16
            manager.notify(notificationID,notif); //notification管理服务发送你所构建的通知  此时你会收到通知

    注意里面的builder.setAutoCancel(true); 如果你不想程序自动帮你点击后关闭,而是自己用代码在另一个位置自己去关闭,那么你可以不写这句代码,也可以设置成false,然后关闭代码可以这么写

            //获取服务
            NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            nm.cancel(getIntent().getIntExtra("notificationID",1)); //关闭显示notificationID为1的通知

    切记关闭id与你通知一致的id。

    也可以写个方法

    /**
         * 显示普通的通知
         */
        private void showNormalNotify(){
            Notification.Builder builder = new Notification.Builder(this);
            builder.setAutoCancel(true); //设置点击玩自动关闭
            builder.setSmallIcon(R.drawable.ic_launcher_background);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_foreground));
            builder.setContentTitle("普通通知");
            builder.setContentText("普通通知的我的鬼内容");
            Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
            PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
            builder.setContentIntent(pendingIntent);
    
            NotificationManager notifiyManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
            notifiyManager.notify(1,builder.build());
        }

    第二种折叠式的通知

    看看效果

    写法也是类似只是需要用到红色标注的代码

     /**
         * 显示折叠式的通知
         */
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        private void showZDNotify(){
    
            Notification.Builder builder = new Notification.Builder(this);
            builder.setAutoCancel(true);
            builder.setSmallIcon(R.drawable.ic_launcher_background);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_foreground));
            builder.setContentTitle("折叠式通知");
            builder.setContentText("这是折叠式通知");
            Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
            PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
            builder.setContentIntent(pendingIntent);
    
            RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.view_fold);
            Notification notification = builder.build();
            notification.bigContentView = remoteViews;
    
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);;
            notificationManager.notify(1,notification);
        }

     

    第三种是悬挂式通知

    看看效果

    来看看使用方法

    写法也是类似只是需要用到红色标注的代码

    /**
         * 显示悬挂式的通知
         */
        private void showXGNotify(){
            Notification.Builder builder = new Notification.Builder(this);
            builder.setAutoCancel(true);
            builder.setSmallIcon(R.drawable.ic_launcher_background);
            builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.folder));
            builder.setContentTitle("悬挂式通知");
            builder.setContentText("这是折叠式通知");
            Intent intent = new Intent();
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setClass(this,TestActivity.class);
            PendingIntent hangPendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
            builder.setFullScreenIntent(hangPendingIntent,true);
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(1,builder.build());
        }

    Android 5.0后加入了一种新的模式Notification显示等级,共有以下3种

    1.VISIBILITY_PUBLIC:任何情况都会显示通知

    2.VISIBILITY_PRIVATE:只有在没有锁屏时会显示通知。

    3.VISIBILITY_SECRET:在pin、password等安全锁和没有锁屏的情况下才能显示通知

    设置非常简单,只要调用setVisibility方法就行了

    builder.setVisibility(Notification.VISIBILITY_PUBLIC);

    是不是很简单。

    好了,好好学习天天向上。 

    学习记录,如果有错请指出,谢谢!

  • 相关阅读:
    linux线程池简单实例
    OpenCv ROI操作
    OpenCV特征点检测------ORB特征
    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
    OpenCv学习--图像画框标记rectangle
    MATLAB 图片鼠标画框保存
    不错的Django博客
    windows下使用Redis
    前端页面模板bootstrap
    Jenkins启动Tomcat时提示Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/7490286.html
Copyright © 2011-2022 走看看