新建一个带MainActivity的项目,注意这里需要获得网络使用状态,需要在AndroidMainfest文件中注册权限:
package="top.xiexiaodong.broadcastdemo">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
MainActivity代码如下:
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "网络连接", Toast.LENGTH_SHORT).show();
Log.d("xxd", "网络连接");
} else {
Toast.makeText(context, "网络断开", Toast.LENGTH_SHORT).show();
Log.d("xxd", "网络断开");
}
}
}
}
广播必须注册,使用完必须取消注册,使用registerReceiver()方法可以进行注册,使用unregisterReceiver()方法取消注册。怎么才能接收广播呢?我们新建一个继承自BroadcastReceiver类的类,重写onReceive()方法,那么接收到广播后的逻辑就在这个方法中处理。android.net.conn.CONNECTIVITY_CHANGE是系统发出的广播名称,也就是网络连接改变时,会发出。然后注册上面的广播服务的会收到这条广播,进行相应的处理。