动态注册:主要是修改活动的代码来完成接收的操作。
静态注册:创建一个接收器,然后主要修改manifest.xml中的内容。
动态注册的方式十分的灵巧方便,但是动态注册必须是程序启动之后才可以接收广播,由于它写在了onCreate的方法当中,由此就引出的静态注册的方式,程序未启动的时候就可以接收相应的广播,这也就是他们之间的关键差别所在了。
动态注册的具体步骤:
1.定义一个Intent过滤器,用于寻找匹配的广播。
2.定义一个类,可以是内部类的方式,让他继承BroadcastReceiver,并复写其中的onReceive方法,写出自己的接收后的处理逻辑。
3.目的有了,处理动作有了,那么我们就将上两个参数传到registerReceiver当中就可以完成注册了。
4.完成注册后,当然还要有退出活动时的解注册,所以在onDestroy中写入解注册。
public class Main2Activity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//定义过滤器
networkChangeReceiver=new NetworkChangeReceiver();//定义处理逻辑的对象
registerReceiver(networkChangeReceiver,intentFilter);//注册
}
//完成后的解注册
protected void onDestroy()
{
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
//处理接收逻辑的内部类
class NetworkChangeReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context,"default",Toast.LENGTH_SHORT).show();
}
}
}
静态注册的步骤:
1.在含有主活动的包中,右击,new,other,Broadcast Receiver,可以勾选的有exported:表示是否可以接收本程序以外的广播,Enabled:表示是否启用这个广播,我们把他们全都勾选上。
2.在这个接收器的onReceive方法中,写入接收后的处理动作。
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"receive",Toast.LENGTH_SHORT).show();
//利用提示信息的Toast提示receive
throw new UnsupportedOperationException("Not yet implemented");
}
}
3.在manifest中获取相应的权限。
你的操作需要什么权限就填写什么权限
4.在manifest中receiver中定义
<intent-filter />
用于指定接收什么样的广播类似于动态中的intentfilter的那一步。