zoukankan      html  css  js  c++  java
  • 定义一个远程服务,绑定本地服务

    class RemoteService : Service() {

    private var mBilder: MyBilder? = null

    override fun onCreate() {
    super.onCreate()
    if (mBilder == null) {
    mBilder = MyBilder()
    }
    }

    override fun onBind(intent: Intent): IBinder? {
    return mBilder
    }

    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
    try {
    this.bindService(Intent(this@RemoteService, LocalService::class.java),
    connection, Context.BIND_ABOVE_CLIENT)
    } catch (e: Exception) {
    }
    return Service.START_STICKY
    }

    override fun onDestroy() {
    super.onDestroy()
    unbindService(connection)
    }

    private inner class MyBilder : GuardAidl.Stub() {
    @Throws(RemoteException::class)
    override fun wakeUp(title: String, discription: String, iconRes: Int) {
    if (Build.VERSION.SDK_INT < 25) {
    val intent = Intent(applicationContext, NotificationClickReceiver::class.java)
    intent.action = NotificationClickReceiver.CLICK_NOTIFICATION
    val notification = NotificationUtils.createNotification(this@RemoteService, title, discription, iconRes, intent)
    this@RemoteService.startForeground(13691, notification)
    }
    }
    }

    private val connection = object : ServiceConnection {
    override fun onServiceDisconnected(name: ComponentName) {
    val remoteService = Intent(this@RemoteService,
    LocalService::class.java)
    this@RemoteService.startService(remoteService)
    this@RemoteService.bindService(Intent(this@RemoteService,
    LocalService::class.java), this, Context.BIND_ABOVE_CLIENT)
    }

    override fun onServiceConnected(name: ComponentName, service: IBinder) {}
    }

    }

    /**
    * 通知栏点击广播接受者
    */
    class NotificationClickReceiver : BroadcastReceiver() {

    companion object {
    const val CLICK_NOTIFICATION = "CLICK_NOTIFICATION"
    }

    override fun onReceive(context: Context, intent: Intent) {
    if (intent.action == NotificationClickReceiver.CLICK_NOTIFICATION) {
    if (KeepLive.foregroundNotification != null) {
    if (KeepLive.foregroundNotification!!.getForegroundNotificationClickListener() != null) {
    KeepLive.foregroundNotification!!.getForegroundNotificationClickListener()?.foregroundNotificationClick(context, intent)
    }
    }
    }
    }
    }

  • 相关阅读:
    rsync+sersync实现文件同步
    HTTP 响应码
    ipv4和ipv6的区别
    查看linux系统版本信息
    MQ基础知识学习
    自动化测试的框架介绍和选择
    python(目录)
    分布式和集群
    raid 工作模式 raid0 raid1 raid10 raid5
    CentOS Docker安装
  • 原文地址:https://www.cnblogs.com/ly570/p/11291189.html
Copyright © 2011-2022 走看看