1.分类:标准广播、有序广播
2.接收方式:动态注册、静态注册
3..动态注册接收:
创建广播接收器:
新建一个类,继承自BroadcastReceiver,重写父类的onReceive()方法
eg:
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); }
class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ ConnectivityManager connnectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connnectionManager.getActiveNetworkInfo(); if(networkInfo != null) { Toast.makeText(context, "netWork is Avalible", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "netWork is unAvalible", Toast.LENGTH_SHORT).show(); } }进行该操作须获得相关权限:在AndroidManifest.xml中加入:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4.静态注册
新建类继承自BroadcastReceiver
需要在AndroidManifedt.xml中注册:
<receiver android:name=".BootCompleteReceive" android:enabled="true"//是否启用该广播接收器 android:exported="true"//是否允许接收本程序以外的广播
<intent-filter android:priority="100"> <action android:name="MY_BROADCAST"/>//接受的广播类型 </intent-filter>/>
5.注意
广播接收器不允许开启线程,当onReceive()运行较长时间没有结束时,程序会报错
6发送标准广播
Intent intent = new Intent("MY_BROADCAST"); sendBroadcast(intent);
7.发送有序广播
Intent intent = new Intent("MY_BROADCAST"); sendOrderedBroadcast(intent,null);
优先级高的接收器优先接收
在AndroidManifest.xml中设置优先级:
<intent-filter android:priority="100"> <action android:name="MY_BROADCAST"/> </intent-filter>
高优先级的接收器在接收到广播以后可以选择是否允许继续传递:
截断:abortBroadcast();
8.本地广播
public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(this); Button button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent("MY_BROADCAST"); localBroadcastManager.sendBroadcast(intent); } }); intentFilter = new IntentFilter(); intentFilter.addAction("MY_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver,intentFilter);//注册本地广播接收器 } class LocalReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "L_Cyl", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ ConnectivityManager connnectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connnectionManager.getActiveNetworkInfo(); if(networkInfo != null) { Toast.makeText(context, "netWork is Avalible", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "netWork is unAvalible", Toast.LENGTH_SHORT).show(); } } } }