【问题标题】:Kotlin MainActivity WebView loadUrl from FirebaseMessagingService来自 FirebaseMessagingService 的 Kotlin MainActivity WebView loadUrl
【发布时间】:2021-12-02 09:39:32
【问题描述】:

在我的 MainActivity 的 Kotlin 应用程序中,我有一个 WebView,我想在 FirebaseMessagingService 上调用函数 onNewToken 时加载 URL:

MainActivity.kt

class MainActivity : AppCompatActivity() {
        val myWebView = findViewById<WebView>(R.id.webView)
        myWebView.loadUrl("https://stackoverflow.com/")
}

MyFirebaseMessagingService.kt

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Log.e("log", "new token: $token")
        getSharedPreferences("_", MODE_PRIVATE).edit().putString("fb", token).apply()
        //here I want to loadUrl
    }
}

我该怎么做?

【问题讨论】:

  • 你可以使用LocalBroadcastManger
  • @gtxtreme LocalBroadcastManger 已弃用
  • 然后使用反应式方法
  • 它是如何工作的?你能举个例子吗?
  • 你可以在下面看到一个方法

标签: android firebase kotlin webview


【解决方案1】:

创建一个作为小型事件总线框架的单例类。这个单例类可以有你需要的LiveData 列表,ActivityService 都可以访问LiveData 的实例。 ServiceActivity 可以充当生命周期所有者,因此您不会遇到任何问题。

object Events {
    val serviceEvent: MutableLiveData<String> by lazy {
        MutableLiveData<String>()
    }
}


class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Log.e("log", "new token: $token")
        getSharedPreferences("_", MODE_PRIVATE).edit().putString("fb", token).apply()
        //here I want to loadUrl
      Events.serviceEvent.postValue()// Here you can post value
    }


class MainActivity : AppCompatActivity() {
        val myWebView = findViewById<WebView>(R.id.webView)
        Events.serviceEvent.observe(this, Observer<T>{
          myWebView.loadUrl("https://stackoverflow.com/")
        }
        
}

参考来自this答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多