从 Android 10 开始,WIFI_P2P_CONNECTION_CHANGED_ACTION不再是 non-sticky 的广播。这意味着应用无法在应用启动时接收到它。因此,必须使用动态广播接收器注册来接收这个广播。以下是一个示例:
class P2PReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION -> {
// handle connection changed
}
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION -> {
// handle device changed
}
}
}
}
class MainActivity : AppCompatActivity() {
private var p2pReceiver: P2PReceiver = P2PReceiver()
private fun registerP2PReceiver() {
val intentFilter = IntentFilter()
intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)
intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION)
registerReceiver(p2pReceiver, intentFilter)
}
private fun unregisterP2PReceiver() {
unregisterReceiver(p2pReceiver)
}
override fun onResume() {
super.onResume()
registerP2PReceiver()
}
override fun onPause() {
super.onPause()
unregisterP2PReceiver()
}
}
在这个例子中,我们创建了一个广播接收器,同时在 activity 的 onResume 和 onPause 中动态注册和取消注册这个接收器,这样就可以接收 WIFI_P2P_CONNECTION_CHANGED_ACTION 和 WIFI_P2P_THIS_DEVICE_CHANGED_ACTION 广播了。