1. 动态注册广播(代码中注册))
onCreate(){} 中
1. 创建intentFilter
2. 设置action
3. 创建接收广播的内部类
4. 注册广播
private IntentFilter intentFilter ;
private NetChangeRecever netChangeRecever;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_cast1);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
netChangeRecever = new NetChangeRecever();
registerReceiver(netChangeRecever,intentFilter);
}
创建广播接收内部类
//使用内部类动态注册广播
class NetChangeRecever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(BroadCast1Activity.this, "网络状态改变", Toast.LENGTH_SHORT).show();
}
}
- onDestroy() 中解注册广播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(netChangeRecever);
}
2. 静态方法注册广播
动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是
它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在
onCreate()方法中的。那么有没有什么办法可以让程序在未启动的情况下就能接收到广播
呢?这就需要使用静态注册的方式了。
- 创建广播接收类
/**
* Created by chen on 2017/7/6.
* 静态注册广播,监听开机完成
*/
public class BootCompleteRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "开机完成", Toast.LENGTH_LONG).show();
}
}
- 功能清单文件中注册
<receiver android:name=".broadcast2.BootCompleteRecevier">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
- 添加相关权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
3. 使用自定义广播
- 创建广播接收类
public class MyBroadCastRecever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "receve my braodcast ", Toast.LENGTH_SHORT).show();
}
}
- 注册广播action
<receiver android:name="com.example.a05_chen.broadcast3.MyBroadCastRecever">
<intent-filter>
<action android:name="com.example.a05_chen.broadcast3.MY_BROADCAST"/>
</intent-filter>
</receiver>
- activity 中通过点击事件发送广播
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_cast3);
bt_sendBroadCast = (Button)findViewById(R.id.bt_sendBroadCast);
bt_sendBroadCast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("com.example.a05_chen.broadcast3.MY_BROADCAST");
sendBroadcast(intent);
}
});
}