将我的图书馆服务与我的应用程序进行通信的最佳方法
Best approach to communicate my library service with my app
我的项目中有一个库正在使用服务来侦听通知。我想要做的是当通知到达时,从处理通知的库中通知应用程序。
我不知道如何从库中注意到该应用程序。我正在尝试做一个界面,但我无法初始化界面,不确定这是否是一个好方法。
这是我想要做的:
在应用程序中 class:
val notification = object: PushNotificationInterface {
override fun listenForPush(remoteMessage: RemoteMessage) {
//Do something
}
}
接口:
interface PushNotificationInterface {
fun listenForPush(remoteMessage: RemoteMessage)
}
图书馆class:
class HMSPushMessagingService: HmsMessageService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
PushToken.token = token
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
//This line give an error in PushNotificationInterface(remoteMessage)
interfaceTest(listenerInterface = PushNotificationInterface(remoteMessage), remoteMessage = remoteMessage)
}
private fun interfaceTest(listenerInterface: PushNotificationInterface, remoteMessage: RemoteMessage) {
listenerInterface.listenForPush(remoteMessage)
}
}
这是一种使用 StateFlow 的方法
class HMSPushMessagingService: HmsMessageService() {
companion object {
val messages = MutableStateFlow<RemoteMessage?>(null)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
messages.value = remoteMessage
}
}
StateFlow 是一个 SharedFlow,因此您可以从应用中的许多地方收集它
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
lifecycleScope.launchWhenStarted {
HMSPushMessagingService.messages.collect {
val remoteMessage = it
// do something
}
}
// or
HMSPushMessagingService.messages.onEach {
// do something
}.launchIn(lifecycleScope)
}
}
详细了解 StateFlow here
我的项目中有一个库正在使用服务来侦听通知。我想要做的是当通知到达时,从处理通知的库中通知应用程序。
我不知道如何从库中注意到该应用程序。我正在尝试做一个界面,但我无法初始化界面,不确定这是否是一个好方法。
这是我想要做的:
在应用程序中 class:
val notification = object: PushNotificationInterface {
override fun listenForPush(remoteMessage: RemoteMessage) {
//Do something
}
}
接口:
interface PushNotificationInterface {
fun listenForPush(remoteMessage: RemoteMessage)
}
图书馆class:
class HMSPushMessagingService: HmsMessageService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
PushToken.token = token
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
//This line give an error in PushNotificationInterface(remoteMessage)
interfaceTest(listenerInterface = PushNotificationInterface(remoteMessage), remoteMessage = remoteMessage)
}
private fun interfaceTest(listenerInterface: PushNotificationInterface, remoteMessage: RemoteMessage) {
listenerInterface.listenForPush(remoteMessage)
}
}
这是一种使用 StateFlow 的方法
class HMSPushMessagingService: HmsMessageService() {
companion object {
val messages = MutableStateFlow<RemoteMessage?>(null)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
messages.value = remoteMessage
}
}
StateFlow 是一个 SharedFlow,因此您可以从应用中的许多地方收集它
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
lifecycleScope.launchWhenStarted {
HMSPushMessagingService.messages.collect {
val remoteMessage = it
// do something
}
}
// or
HMSPushMessagingService.messages.onEach {
// do something
}.launchIn(lifecycleScope)
}
}
详细了解 StateFlow here