Kotlin Service实现消息推送通知过程

目录
  • 建立Service
  • 绑定服务
  • 小结

四大组件,就剩下最后一个Service ,他比较重要,相当于后台服务,基本上大部分的app,都会有一两个这样的服务Service

Service用处非常的多,可以根据后台的特性来决定Service的用法。

Service 的使用也非常的简单,简单的建立和绑定,就能完成Service的动作。

建立Service

这里我们创建一个Service,用它来发送消息服务,这里从服务的建立和用Binder 来绑定服务,这样可以建立起ServiceActivity之间的通讯问题。

建立一个

    internal class MyBinder(private val service: NotificationService) : Binder() {
        fun getService() : NotificationService{
            return service
        }
    }

MyBinder 是我们的中间人,我们需要通过它来找到真正的Service

NotificationService 如下:

class NotificationService : Service() {
    private lateinit var mNotification: Notification
    private val mNotificationId: Int = 1000
    private var mBinder = MyBinder(this@NotificationService)
    companion object {
        const val CHANNEL_ID = "com.kotlin.kotlin_start_ch18.CHANNEL_ID"
        const val CHANNEL_NAME = "Sample Notification"
    }
    override fun onBind(intent: Intent): IBinder {
        return mBinder
    }

这里NotificationService 是一个空的,什么任务也没有,为他加一个简单的任务,就是消息推送通知。

 @SuppressLint("NewApi")
    private fun createChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // Create the NotificationChannel, but only on API 26+ because
            // the NotificationChannel class is new and not in the support library
            val context = this.applicationContext
            val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            val importance = NotificationManager.IMPORTANCE_HIGH
            val notificationChannel = NotificationChannel(CHANNEL_ID, CHANNEL_NAME, importance)
            notificationChannel.enableVibration(true)
            notificationChannel.setShowBadge(true)
            notificationChannel.enableLights(true)
            notificationChannel.lightColor = Color.parseColor("#e8334a")
            notificationChannel.description = getString(R.string.notification_channel_description)
            notificationChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
            notificationManager.createNotificationChannel(notificationChannel)
        }
    }

通过上面的代码,NotificationService 就有了自己的事情做了,可以通过notifyMessage()

    public fun notifyMessage(){
        //Create Channel
        createChannel()
        val context = this.applicationContext
        var notificationManager: NotificationManager =
            context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val notifyIntent = Intent(this, ResultActivity::class.java)
        val title = "Sample Notification"
        val message =
            "You have received a sample notification. This notification will take you to the details page."
        notifyIntent.putExtra("title", title)
        notifyIntent.putExtra("message", message)
        notifyIntent.putExtra("notification", true)
        notifyIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        val pendingIntent =
            PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_IMMUTABLE)
        val res = this.resources
        val uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mNotification = Notification.Builder(this, CHANNEL_ID)
                // Set the intent that will fire when the user taps the notification
                .setContentIntent(pendingIntent)
                .setSmallIcon(R.drawable.ic_stat_name)
                .setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setContentTitle(title)
                .setStyle(
                    Notification.BigTextStyle()
                        .bigText(message)
                )
                .setContentText(message).build()
        } else {
            mNotification = Notification.Builder(this)
                // Set the intent that will fire when the user taps the notification
                .setContentIntent(pendingIntent)
                .setSmallIcon(R.drawable.ic_stat_name)
                .setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher))
                .setAutoCancel(true)
                .setPriority(Notification.PRIORITY_MAX)
                .setContentTitle(title)
                .setStyle(
                    Notification.BigTextStyle()
                        .bigText(message)
                )
                .setSound(uri)
                .setContentText(message).build()
        }
        notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        // mNotificationId is a unique int for each notification that you must define
        notificationManager.notify(mNotificationId, mNotification)
    }

当我们发送的通知消息被点击以后,会回到我们appResultActivity 中,只要在程序中把ResultActivity 实现为自己的逻辑,就能调整到ResultActivity 页面中。

绑定服务

启动服务可以有两种方法,一种是直接启动,一种还要进行相应的绑定。

val service = Intent(this@MainActivity, NotificationService::class.java)
            service.putExtra("reason", intent.getStringExtra("reason"))
            service.putExtra("timestamp", intent.getLongExtra("timestamp", 0))
            service.data = Uri.parse("custom://" + System.currentTimeMillis())
            startService(service)

我们需要和Service 进行通讯,所以我们采用绑定的方式。

    private fun bindService() {
        connection = object : ServiceConnection {
            override fun onServiceConnected(name: ComponentName, service: IBinder) {
                binder = service as NotificationService.MyBinder
            }
            override fun onServiceDisconnected(name: ComponentName) {}
        }
        val intent = Intent(this, NotificationService::class.java)
        startService(intent)
        bindService(intent, connection as ServiceConnection, Context.BIND_AUTO_CREATE)
    }

如上,我们可以通过服务,发送通知消息了。

小结

四大组件,我们已经一个一个的进行了简单的介绍,你会慢慢的了解到安卓开发中主要的组件形式和使用的方法,后面还会慢慢的安卓的其他的特性进行介绍。这四大组件非常的重要,可以在其他的demo中注意这四个组件的用法,对开发程序会有很大的帮助。

到此这篇关于Kotlin Service实现消息推送通知过程的文章就介绍到这了,更多相关Kotlin Service消息推送内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Kotlin Service服务组件开发详解

    目录 服务简介 服务的创建 服务的启动方式 Service的生命周期 Activity和Service进行通信 实现前台Service 服务简介 服务是Android中的四大组件之一,它能够长期在后台运行且不提供用户界面.即使用户切到另一应用程序,服务仍可以在后台运行. 服务的创建 (1)创建Service子类 class MyService : Service() { override fun onBind(intent: Intent): IBinder { TODO("Return the

  • Kotlin Service实现消息推送通知过程

    目录 建立Service 绑定服务 小结 四大组件,就剩下最后一个Service ,他比较重要,相当于后台服务,基本上大部分的app,都会有一两个这样的服务Service . Service用处非常的多,可以根据后台的特性来决定Service的用法. Service 的使用也非常的简单,简单的建立和绑定,就能完成Service的动作. 建立Service 这里我们创建一个Service,用它来发送消息服务,这里从服务的建立和用Binder 来绑定服务,这样可以建立起Service 和Activi

  • vue使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt消息通知建立一个独立于业务服务系统的消息通知服务,这个服务还可以与开发的语言无关,客户端既可以是安卓也可以是ios,也可以是java或者c#,python等.闲话不多扯,这里只是实现了在vue中使用mqtt的js客户端,后台用.net WEB API用的是c#的mqtt客户端 第一步:安装依赖 np

  • iOS消息推送原理及具体实现代码

    一.消息推送原理 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]): 2.APNS:Apple Push Notification Service[苹果消息推送服务器]: 3.iPhone:用来接收APNS下发下来的消息: 4.Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定

  • iOS实现消息推送及原理分析

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]): 2.APNS:Apple Push Notification Service[苹果消息推送服务器]: 3.iPhone:用来接收APNS下发下来的消息: 4.Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制

  • iOS消息远程推送通知

    本文实例为大家分享了iOS消息推送.iOS远程通知代码,供大家参考,具体内容如下 消息推送 /* 要开发测试消息机制的程序,必须用真机测试 推送消息的类型 UIRemoteNotificationTypeNone 不接收推送消息 UIRemoteNotificationTypeBadge 接收图标数字 UIRemoteNotificationTypeSound 接收音频 UIRemoteNotificationTypeAlert 接收消息文字 UIRemoteNotificationTypeNe

  • Android消息推送:手把手教你集成小米推送(附demo)

    前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo概况 目录说明: DemoApplication类 继承自Application类,其作用主要是:设置App的ID & Key.注册推送服务 DemoMessageReceiver类 继承自

  • 基于SignalR的消息推送与二维码扫描登录实现代码

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于SinglarR消息推送机制的扫描登录.本系统涉及到以下知识点: SignalR:http://signalr.net/ 这官网,ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的

  • Android中利用App实现消息推送机制的代码

    1.消息推送机制 服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭. 我想到了一句话:don't call me,i will call you! qq今天在右下角弹出了一个对话框:"奥巴马宣布本拉登挂了...",正是如此. 自作聪明,就会带点小聪明,有人喜欢就有人讨厌. 2.独立进程 无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务. 我们需要一个独立进程的后台服务. 在androidmanifest.xml中注

  • 微信小程序开发实现消息推送

    微信小程序的消息推送简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,可以链接进入到小程序的指定页面. 微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单.支付成功.一次只能发一条,当然可以通过某种方法发送多条,小的就不在这里赘述了.下面就介绍一下如何推送消息. 一.准备工作 首先,在微信公众平台开通消息推送功能,并添加消息模板.可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的. 发送模板消息需要用到accesstoken.formId

  • SpringBoot实现钉钉机器人消息推送的示例代码

    零.前言 上一次做消息推送,是微信公众号的定时消息通知. 由于自己当时的水平不够,加上企鹅家的开发文档普遍不太友好,导致根本看不懂文档在写什么,不得不去看第三方博客来学习公众号的开发. 这次就不一样了,昨天刚看了一下,阿里的开发文档比鹅厂要清晰的多,而且在同一功能上,使用了多种语言作为示例代码,可以说很友好了.可能这就是阿里和鹅厂的区别吧...辣鸡文档和好文档的区别... 本着"授之以渔"的态度,写了这篇文章,作为官方文档的补充. 一.在群里添加机器人 在群设置的智能群助手中添加自定义

随机推荐