原生消息推送

     现在项目中,很多都是用的是第三方的消息推送,个推、魔推等消息推送都有相关文档,比如个推还有一个简单的Demo,确实几分钟就能集成,但是里面还是有很多的坑!今天主要说说安卓原生的通知。
    消息推送可以写在服务,广播,活动中,但是大多数时间都是卸载服务广播中的,因为只有当不在这个活动中了,一般使用通知,直接上代码:
NotificationManager systemService = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                Notification builder = new NotificationCompat.Builder(MainActivity.this).setContentText("SSsss").setAutoCancel(true).setContentTitle("title")
                        .setSmallIcon(R.mipmap.ic_launcher).setSound(Uri.fromFile(new File("system/media/audio/ringtones/Luna.ogg")))
                        .setLights(Color.GREEN,1000,1000).setVibrate(new long[]{0,1000,1000,1000,10000}).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                        .setStyle(new NotificationCompat.BigTextStyle().bigText("sssssssssssssssswwwwwwwwwwssssssssssssss")).setPriority(Notification.PRIORITY_MAX).build();
                systemService.notify(1, builder);
      对以上代码简单解释下:先获取系统服务的通知服务,然后使用NotificationCompat这个类创建对象,因为系统每个版本对通知这块的API改动都比较大,所以使用整个类能做到兼容。然后再设置显示标题,图像等一系列信息。最后使用notify方法,注意该方法的第一个参数必须不同于其他的通知;
   按照上面代码,运行到手机上,却不能点击,  这就引出了pendingintent;

PendingIntent 使用

    这个和Intent都可以发送一个意图,但是他们的区别在于Intent 是立即执行这个意图,而PendingInetnt 则是在某个指定的时间点去发送这个意图。
      PendingIntent提供了几个静态的方法getActivity, getboradcast,getserver这个几个方法,参数都一样,有四个第一个是一个上下文,第二个参数我从来没用过,几乎是用不到的,传0就可以,第三个参数就是意图,第四个参数,是一个模式,棘突的可以看下文档,一般使用传(context,0,intent,0);  添加到通知的使用就是在链式后面加上 . setContentintent(pi)传入PendingIntent的实例;
 Intent intent = new Intent(MainActivity.this, DeaitalActivity.class);
                PendingIntent activity = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
                NotificationManager systemService = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                Notification builder = new NotificationCompat.Builder(MainActivity.this).setContentText("SSsss").setContentIntent(activity).setAutoCancel(true).setContentTitle("title")
                        .setSmallIcon(R.mipmap.ic_launcher).setSound(Uri.fromFile(new File("system/media/audio/ringtones/Luna.ogg")))
                        .setLights(Color.GREEN,1000,1000).setVibrate(new long[]{0,1000,1000,1000,10000}).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                        .setStyle(new NotificationCompat.BigTextStyle().bigText("sssssssssssssssswwwwwwwwwwssssssssssssss")).setPriority(Notification.PRIORITY_MAX).build();
                systemService.notify(1, builder);
    这样就解决了通知的点击事件,然后当你点击了你会发现通知栏怎么还有,那是因为通知需要我们处理才会消失,让他消失有两种方式:1.在链式调用后加上.setAutoCancel(true)让自动取消;2.获取到系统服务的通知对象调用这个服务对象的 .cancle(1)方法,这个1就是刚才我们创建这个通知的id号码;

上面的 NotificationCompat.Builder 还提供了其他setSound()发送

.setSmallIcon(R.mipmap.ic_launcher).setSound(Uri.fromFile(new File("system/media/audio/ringtones/Luna.ogg"))).setVibrate(new long[]{0,1000,1000,1000,10000})  震动,或声音
    上面的还提供了API。 可以设置富文本       setStyle( ) 
.setStyle(new NotificationCompat.BigTextStyle().bigText("sssssssssssssssswwwwwwwwwwssssssssssssss")).setPriority(Notification.PRIORITY_MAX).build();

手机震动还需要加上权限:

<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
      最后提醒下,这个通知最好是比较重要的内容,以免引起用户的反感,导致我们的引用别卸载!
    附上一个demo: https://github.com/zh2016hz/NotifydataDemo.git
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文出处: http://www.androidchina.net/6174.html Notification在...
    木木00阅读 12,398评论 3 32
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 1.使用通知 1.1 创建一个通知 第一步:获得NotificationManager对象来对通知进行管理。可以调...
    figure_ai阅读 2,376评论 0 0
  • 使用通知 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出...
    努力生活的西鱼阅读 722评论 0 0
  • “你走了,可是我如何继续在这个城市平静的生活下去”发完这条信息给姐姐后,她拖着失魂的肉体机械的往家走去。 老公站在...
    舞橙阅读 181评论 1 1