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)
    }
    }
    }
    }
    }

  • 相关阅读:
    linux运维学习
    2017年阿里巴巴三面经验
    Spring Boot:在Spring Boot中使用Mysql和JPA
    meshroom和alicevision在Ubuntu16上的安装过程
    ubuntu rm -rf ntfs 硬盘恢复
    python 脚本内部修改 LD_LIBRARY_PATH
    python uml 图
    tlmgr 相关
    ubuntu 安装 clangd 10.0.0
    zsh 快捷键
  • 原文地址:https://www.cnblogs.com/ly570/p/11291189.html
Copyright © 2011-2022 走看看