在 Kotlin 中通过发送广播启动新 Activity

Posted

技术标签:

【中文标题】在 Kotlin 中通过发送广播启动新 Activity【英文标题】:Start New Activity with Sending Broadcast in Kotlin 【发布时间】:2020-07-28 15:22:20 【问题描述】:

我想在成功尝试LoginActivity 后启动DashBoardActivity。我也想在登录后广播 UserToken。但是我可以startActivity()sendBroadcast(). 如果我在LoginActivity.kt 中使用以下代码,那么

btnLogin.setOnClickListener 
    if(loginSuccess)
         sendBroadcast(Intent("TEST"))
         startActivity(Intent(this, DashboardActivity::class.java))
         finish()
    

Dashboard Activity 将打开,但广播 onReceive() 不起作用。请帮助我正确地完成这项任务。

DashBoardActivity.kt

override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dashboard)

        registerReceiver(userDataChangeReceiver,
            IntentFilter("TEST"))
    

    private val userDataChangeReceiver = object: BroadcastReceiver() 
        override fun onReceive(context: Context?, intent: Intent?) 
            println("succeess!")
        
    

【问题讨论】:

为什么要使用广播接收器?您可以启动将令牌放入意图的活动。类似于: Intent intent = new Intent(context, DashboardActivity.class); intent.putExtra(KEY, );开始活动(意图); 我的重点是广播...所以 好的,但您不应该使用广播接收器在您的应用程序中提供令牌。无论如何,您应该发布您的 DashboardActivity 代码以检查接收方是否已注册 我已经更新了帖子 问题是您在接收者注册之前发送广播。您在活动中注册接收器,但在活动尚未开始时发送广播 【参考方案1】:
override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_dashboard)

  val userDataChangeReceiver = object: BroadcastReceiver() 
    override fun onReceive(context: Context?, intent: Intent?) 
        println("succeess!")
    
 

    registerReceiver(userDataChangeReceiver,
        IntentFilter("TEST"))
 

【讨论】:

DashboardActivity 已启动,但 onReceive() 方法无效!

以上是关于在 Kotlin 中通过发送广播启动新 Activity的主要内容,如果未能解决你的问题,请参考以下文章

在android中通过服务实现sip

在 Sharepoint Online 中通过快速启动打开新窗口

在 Flink 中通过广播进行 join 操作

新 Android在一个APP中通过包名或类名启动另一个APP

新 Android在一个APP中通过包名或类名启动另一个APP

android中通过kotlin使用WebView