广播的类型
标准广播 ,有序广播
标准广播
一种完全异步的执行的广播,在广播发出之后,所有的广播接收器几乎会在同一时间接收到这条广播消息,因此它们之前没有任何的先后顺序,特点: 效率高,无法拦截有序广播
一种同步执行的广播,在广播发出之后,同一时刻只有一个广播接受器能够接收到这条消息,当这个广播接收器的逻辑执行完毕后,广播才会继续传递。特点:有先后顺序,可拦截
接收系统广播
注册广播的方式分为2中: 动态注册,静态注册
动态注册监听网络变化
在代码中注册
1. 新建内部类,并继承BroadcastReceiver
2. 重写 onReceive()方法
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangerReceiver
networkChangerReceiver;//内部类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangerReceiver = new NetworkChangerReceiver();
registerReceiver(networkChangerReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangerReceiver);
}
class NetworkChangerReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"net work changes",Toast.LENGTH_SHORT).show();
}
}
}
静态注册实现开启启动
- 新建一个类
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show();
}
}
- 在AanroidManifest.xml文件中增加注册信息
<!-- 加入权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 在aplicaton中加入receiver标签 并制定接收器 -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>