kotlin代码创建一个发送广播的应用程序,点击发送广播,延迟5秒后,发送一个广播,并发送数据money=1000,然后创建第2应用程序,接收第1个程序发送的广播,接收传递过来的数据,并Toast显示,
时间: 2024-09-25 13:09:16 浏览: 35
在Kotlin中,你可以使用Android的`LocalBroadcastManager`来实现这样的功能。首先,你需要在发送者应用中设置广播发射器:
```kotlin
// 发送广播的Activity或Fragment
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v4.app.LocalBroadcastManager
import kotlinx.coroutines.sleep
import java.util.concurrent.TimeUnit
class SenderActivity : AppCompatActivity() {
private val localBroadcastManager = LocalBroadcastManager(this)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 模拟延迟5秒后发送广播
GlobalScope.launch {
delay(5L, TimeUnit.SECONDS) { /* do nothing */ }
val intent = Intent("com.example.MONEY_BROADCAST")
intent.putExtra("money", 1000)
localBroadcastManager.sendBroadcast(intent)
}
// 如果你想在点击按钮时立即发送广播,可以将这行代码放到相应按钮的点击监听器里
// localBroadcastManager.sendBroadcast(Intent("com.example.MONEY_BROADCAST").apply { putExtra("money", 1000) })
}
}
```
接下来,在接收者应用中,你需要创建一个广播接收器来处理接收到的广播:
```kotlin
// 接收广播的Activity或Fragment
class ReceiverActivity : AppCompatActivity(), BroadcastReceiver {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
LocalBroadcastManager.getInstance(this).registerReceiver(this, IntentFilter("com.example.MONEY_BROADCAST"))
}
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == "com.example.MONEY_BROADCAST") {
val money = intent.getIntExtra("money", -1)
if (money != -1) {
Toast.makeText(this, "Received Money: $money", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "No money data received.", Toast.LENGTH_SHORT).show()
}
}
}
override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(this).unregisterReceiver(this)
}
}
```