1. 在公共模块定义接口比如,需要用的data class之类的
interface SunnyDeviceApi {
fun init(context: Context)
fun register(context: Context, key: String,listener: DataListener ?)
fun unregister(context: Context, key: String)
}
interface DataListener {
fun updateSportData(data: SportData)
}
data class SportData(
val time: Int,
val calories: Float,
val distance: Float,
var speed: Float,
var incline: Int,
var pulse: Int,
var steps: Int
)
2. 在内部模块,比如 module_device模块定义,需要继承 api接口和 IProvider
@Route(path = RrouterConstant.DEVICE_API)
class ZhongyangDeviceApi : SunnyDeviceApi ,IProvider{
override fun init(context: Context) {
。。。。
}
private val receiverMap = mutableMapOf<String, BroadcastReceiver>()
private val listenerMap = mutableMapOf<String, SunnyDataListener>()
override fun register(context: Context, key: String, listener: SunnyDataListener?) {
。。。。。。。
receiverMap.put(key, sportDataReceiver)
listener?.apply {
listenerMap.put(key, listener)
}
}
override fun unregister(context: Context, key: String) {
LogUtils.d("$Tag,unregister key =$key")
。。。。。
receiverMap.remove(key)
listenerMap.remove(key)
}
}
3.在公共模块中获取SunnyDeviceApi
object RrouterDeviceModule {
private val sunnyDeviceApi: SunnyDeviceApi by lazy {
ARouter.getInstance().build(RrouterConstant.DEVICE_API).navigation() as SunnyDeviceApi
}
public fun getDeviceApiInstance(): SunnyDeviceApi {
return sunnyDeviceApi
}
}
4.在其他模块中,其他模块只需要 依赖公共模块,就可以通过 RrouterDeviceModule 对device模块进行访问
RrouterDeviceModule.getDeviceApiInstance().init(this)