1.Android中广播主要分为两种:标准广播和有序广播。
标准广播:完全异步执行。广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分。
优点:效率高
缺点:不能被截断
有序广播:同步执行。广播发出后,优先级较高的广播接收器先接收到广播,执行完该广播接收器的逻辑后广播才会继续传递,优先级较高的接收器可以对广播进行截断组织广播的传递。
2.注册广播的方法:一般有两种
1.动态注册:在代码中注册,必须启动程序才能接收广播
2.静态注册:在AndroidManifest.xml中注册,程序未启动时也可接收广播
3.如何创建一个广播接收器?
创建一个类,让它继承BrocastReceiver并重写父类onReceive()方法
动态注册exam:
public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChangedReceiver networkChangedReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 创建IntentFilter实例,并让它addAction,参数就是网络发生变化时系统发出的一条广播android.net.conn.CONNECTIVITY.CHANGE * NetworkChangeReceiver 的实例, 然后调用 registerReceiver()方法进行注册,将 NetworkChangeReceiver 的实例和 IntentFilter 的实例都传了进去,这样NetworkChangeReceiver就会收到所有值为 android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了监听网络变化的功能。 * */ intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangedReceiver = new NetworkChangedReceiver(); registerReceiver(networkChangedReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangedReceiver);//取消注册 } /* * 内部类NetworkChangedReceiver,重写了父类的onReceive方法,当网络状态发生变化时,OnReceive()方法得到执行 * * */ class NetworkChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //先通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。 ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); //调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); //调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了 if (networkInfo != null && networkInfo.isAvailable()) { Toast.makeText(context,"Network is available",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(context,"Network is unavailable",Toast.LENGTH_SHORT).show(); } /* * 有非常重要的一点需要说明,Android 系统为了保证应用程序的安全性做了规定,如果程序需要访问一些系统的关键性信息,必须在配置文件中声明权限才可以 * 打开AndroidMainfest.xml文件,<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> * 访问 http://developer.android.com/reference/android/Manifest.permission.html可以查看 Android系统所有可声明的权限。 * */ }静态注册exam(事先创建一个广播器继承BrocastReceiver重写onReceive方法):
1.在<applcation>里添加<receive>标签
2.通过android:name:指定具体注册哪一个广播接收器
3.在<intent_filter>标签加入想要接收的广播
4.记得要声明相应的权限<uses-permission>
4.由于在广播接收器中是不允许开启线程的,所以不要在onReceive方法中添加过多的逻辑或者进行任何耗时的操作,当onReceive方法运行较长时间而没有结束时,程序就会报错。广播接收器扮演的更多是一种打开其他程序其他组件的角色。如创建状态栏通知或者启动某个服务。
转载于:https://www.cnblogs.com/It-Hugo0527/p/5757356.html
相关资源:JAVA上百实例源码以及开源项目