美文网首页
原生消息推送

原生消息推送

作者: gogoingmonkey | 来源:发表于2017-04-26 11:37 被阅读42次
         现在项目中,很多都是用的是第三方的消息推送,个推、魔推等消息推送都有相关文档,比如个推还有一个简单的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

    相关文章

      网友评论

          本文标题:原生消息推送

          本文链接:https://www.haomeiwen.com/subject/nwcizttx.html