该问题解决的关键在于接收器注册的方式。以下是一种可以解决该问题的示例代码:
// 创建一个广播接收器类
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取Wifi状态改变的动作
String action = intent.getAction();
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.isConnected()) {
Toast.makeText(context, "Wifi Connected!", Toast.LENGTH_SHORT).show();
}
}
}
}
// 在Activity中注册广播接收器
public class MainActivity extends AppCompatActivity {
private WifiReceiver wifiReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
wifiReceiver = new WifiReceiver();
registerReceiver(wifiReceiver, filter);
}
// 取消注册
@Override
protected void onDestroy() {
super.onDestroy();
if (wifiReceiver != null) {
unregisterReceiver(wifiReceiver);
}
}
}
在此代码中,WifiReceiver
类是一个广播接收器,它将在接收到“Wi-Fi状态已更改”的广播后执行特定的操作。在MainActivity
类中,我们将这个接收器注册到系统中,并指定它应该接收哪些广播。重要的是,我们必须在Activity生命周期的适当时候取消注册接收器,以避免不必要的内存泄漏。