zoukankan      html  css  js  c++  java
  • Notification(Android)消息推送机制

    Notification有哪些功能作用呢

      1)显示接收的短信,消息(QQ,微信,新浪,爱奇艺等)

      2)显示客户端的推送消息

      3)显示正在进行的事务(正在播放的音乐,下载进度条)

    通知状态栏主要涉及到两个类,Notification、NotificationManager

    Notification是通知消息类,它里面对应的通知栏的各种属性

    Notification使用步骤

      <1>.得到通知管理者,因为NotificationManager是一个系统Service,所以需要通过getService得到

    NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

      <2>.创建Notification

    NotificationCompat.Builder builder=new NotificationCompat.Builder(this);

      <3>.为Notification设置各种属性

      <4>.通过通知管理者NotificationManager发送通知

    notificationManager.notify(0x101,notification);

      <5>.删除通知

    notificationManager.cancel(NOTIFICATION_ID);

    完整的代码
    1.创建对应的service

     1 class TaskManageNotificationService extends Service {
     2                 // 获取消息线程
     3                 private MessageThread messageThread = null;
     4 
     5                 // 点击查看
     6                 private Intent messageIntent = null;
     7                 private PendingIntent messagePendingIntent = null;
     8 
     9                 // 通知栏消息
    10                 private int messageNotificationID = 1000;
    11                // private Notification messageNotification = null;
    12                 private NotificationManager messageNotificationManager = null;
    13                 //实例化通知
    14                 private NotificationCompat.Builder builder = null;
    15 
    16                 public TaskManageNotificationService() {
    17                 
    18                 }
    19 
    20                 @Override
    21                 public IBinder onBind(Intent intent) {
    22                     return null;
    23                 }
    24 
    25                 @Override
    26                 public int onStartCommand(Intent intent, int flags, int startId) {
    27 
    28                     //实例化通知管理器
    29                     messageNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    30                    
    31 
    32                     messageIntent = new Intent(this, MainActivity.class);
    33                     messagePendingIntent = PendingIntent.getActivity(this, 0,
    34                             messageIntent, 0);
    35 
    36                     // 开启线程
    37                     messageThread = new MessageThread();
    38                     messageThread.isRunning = true;
    39                     messageThread.start();
    40 
    41                     return super.onStartCommand(intent, flags, startId);
    42                 }
    43 
    44 
    45                 /**
    46                  * 从服务器端获取消息
    47                  *
    48                  */
    49                 class MessageThread extends Thread {
    50                     // 设置是否循环推送
    51                     public boolean isRunning = true;
    52 
    53                     public void run() {
    54                          while (isRunning) {
    55                             try {
    56                                 // 间隔时间
    57                                 Thread.sleep(1000);
    58                                 // 获取服务器消息
    59                                 String serverMessage = getServerMessage();
    60                                 if (serverMessage != null && !"".equals(serverMessage)) {
    61                                      //实例化通知
    62                                     builder = new NotificationCompat.Builder(this);
    63                                     builder.setContentTitle("新任务");//设置通知标题
    64                                     builder.setContentText("不要放孔明灯,容易起火");//设置通知内容
    65                                     builder.setDefaults(NotificationCompat.DEFAULT_ALL);//设置通知的方式,震动、LED灯、音乐等
    66                                     builder.setAutoCancel(true);//点击通知后,状态栏自动删除通知
    67                                     builder.setSmallIcon(R.drawable.court_easyicon_9);//设置小图标
    68                                     // 更新通知栏 设置通知内容
    69                                     builder.setContentText(serverMessage);
    70                                     //设置点击通知后将要启动的程序组件对应的PendingIntent
    71                                     builder.setContentIntent(messagePendingIntent);
    72                                     messageNotificationManager.notify(messageNotificationID,
    73                                             builder.build());
    74                                     // 每次通知完,通知ID递增一下,避免消息覆盖掉
    75                                     messageNotificationID++;
    76                                 }
    77                             } catch (InterruptedException e) {
    78                                 e.printStackTrace();
    79                             }
    80                          }
    81                     }
    82                 }
    83 
    84                 @Override
    85                 public void onDestroy() {
    86                     // System.exit(0);
    87                     messageThread.isRunning = false;
    88                     super.onDestroy();
    89                 }
    90 
    91                 /**
    92                  * 模拟发送消息
    93                  *
    94                  * @return 返回服务器要推送的消息,否则如果为空的话,不推送
    95                  */
    96                 public String getServerMessage() {
    97                     return "NEWS!";
    98                 }
    99         }

    2.在mainfeast.xml文件中配置Service

    <service  android:name=".services.TaskManageNotificationService">
        <intent-filter>
            <action android:name="task_manage_notification"/>
        </intent-filter>
    </service>    

    3.使用创建的service

    // 启动service
    Intent intent = new Intent();
    intent.setAction("task_manage_notification");
    startService(intent);
    
    // 停止service
    Intent intent = new Intent();
    intent.setAction("task_manage_notification");
    stopService(intent);
            积极竞争
        不惧失败
    学习提升
  • 相关阅读:
    AMH4.2 Ftp账号路径修改设置
    过狗一句话
    破解tumblr背景音乐
    lnmp下安装ffmpeg和ffmpeg-php教程
    How To install FFMPEG, FLVTOOL2, MP4Box on CentOS server 2015 easy method
    自己的路删除
    弹出CPA
    JSON的相关知识
    JavaScript函数的相关知识
    JavaScript对象的相关知识
  • 原文地址:https://www.cnblogs.com/acmez/p/13606356.html
Copyright © 2011-2022 走看看