Skip to content

Android广播接收器封装 —— 让动态注册广播接收器更加简单

Notifications You must be signed in to change notification settings

cbfg5210/BroadcastReceiver

Repository files navigation

BroadcastReceiver

⚠️ 本库已迁移至 Gitee 并且后续的更新会在这里喔:BCReceiver

为了简化广播接收处理,最近封装了一下广播接收器,下面和大家分享一下封装后的使用方法,还望各位看官多多指点!

引入依赖

Step 1. Add the JitPack repository to your build file

allprojects {
	repositories {
	  ...
	  maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

dependencies {
       implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
       implementation 'androidx.appcompat:appcompat:1.1.0'
       implementation 'com.github.cbfg5210:BroadcastReceiver:0.1'
}

使用

1、普通用法

    BcstReceiver()
            // 添加 action 等
            .withFilter { intentFilter ->
                intentFilter.addAction(Intent.ACTION_TIME_CHANGED)
                intentFilter.addAction(Intent.ACTION_TIME_TICK)
            }
            // 设置回调
            .setCallback { context, intent -> Log.e("***", "${System.currentTimeMillis()}") }
            // 自定义回调处理
            //.setBcstWatcher(BcstWatcher)
            //.bind(this, lifecycle) // 默认在 onCreate 注册广播接收器,在 onDestroy 注销
            //.bind(this,lifecycle,Lifecycle.Event.ON_START) // 在 onStart 注册广播接收器,在 onStop 注销
            .bind(this, lifecycle, Lifecycle.Event.ON_RESUME) // 在 onResume 注册广播接收器,在 onPause 注销

2、自定义回调处理

以时间广播为例,我们在收到时间广播后,往往需要获取当前的时间并且对其进行格式化,这时候可以实现 BcstWatcher 的接口, 在其中对时间进行处理再对外提供以外回调方法以供使用即可。

BcstWatcher.kt :

interface BcstWatcher {
    /**
     * 创建 BcstReceiver 广播接收器回调
     */
    fun create(): (context: Context, intent: Intent) -> Unit

    /**
     * 注册广播接收器时调用
     */
    fun triggerAtOnce(context: Context)
}

TimeWatcher.kt :

class TimeWatcher(format: String? = null, locale: Locale? = null, private val action: (timeMills: Long, formattedTime: String?) -> Unit) : BcstWatcher {
    private var dateFormat: SimpleDateFormat? = null

    init {
        format?.run { dateFormat = SimpleDateFormat(this, locale ?: Locale.getDefault()) }
    }

    override fun create(): (context: Context, intent: Intent) -> Unit {
        return { _, _ -> handle() }
    }

    override fun triggerAtOnce(context: Context) {
        handle()
    }

    private fun handle() {
        val timeMills = System.currentTimeMillis()
        val formattedTime = dateFormat?.format(timeMills)
        action.invoke(timeMills, formattedTime)
    }
}

使用 TimeWatcher:

   BcstReceiver()
          .withFilter { intentFilter ->
              intentFilter.addAction(Intent.ACTION_TIME_CHANGED)
              intentFilter.addAction(Intent.ACTION_TIME_TICK)
          }
           .setBcstWatcher(TimeWatcher("yyyy-MM-dd HH:mm:ss") { timeMills, formattedTime ->
	       Log.e("***", "timeMills=$timeMills,formattedTime=$formattedTime")
	   })
          .bind(this, lifecycle)

为了便利使用以及减少重复代码,依赖库中对时间广播、home 键广播、电量广播、网络广播自定义了回调处理: capture_1.png

具体使用可以看这里

About

Android广播接收器封装 —— 让动态注册广播接收器更加简单

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages