广播接收器在Kotlin中不起作用

问题描述 投票:0回答:1

已弃用LocalBroadcastManager,我正在尝试使用sendBroadcast()registerReceiver(),但它不起作用。请帮我!我想将信息从LoginActivity传递给MainActivity

LoginAcitivity.kt

val userDataChange = Intent(BROADCAST_USER_DATA_CHANGE)
            userDataChange.setClass(this, MainActivity::class.java)
            this.sendBroadcast(userDataChange)
            startActivity(userDataChange)
            finish()

MainActivity.kt

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

            registerReceiver(userDataChangeReceiver,
                IntentFilter(BROADCAST_USER_DATA_CHANGE))
    }

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

    }

但是,输出什么都没有...

android kotlin android-intent broadcastreceiver
1个回答
0
投票

您能否确切说明您不希望在“活动”之间共享哪种数据?我认为与Bundle共享此数据是一个更好的主意。

示例:

// Create the text message with a string
val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    putExtra(Intent.EXTRA_TEXT, textMessage)
    type = "text/plain"
}

// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(packageManager) != null) {
    startActivity(sendIntent)
}

更多信息:https://developer.android.com/guide/components/intents-filters

对于您的情况非常重要!您必须在清单中注册您的广播接收器

示例

<receiver android:name=".MyBroadcastReceiver"  android:exported="false">
    <intent-filter>
        ...
    </intent-filter>
</receiver>

更多信息https://developer.android.com/guide/components/broadcasts

© www.soinside.com 2019 - 2024. All rights reserved.