无序广播
1.发送端
Intent intent = new Intent();
intent.setAction("com.aa");
intent.putExtra("name","黄彪");
sendBroadcast(intent);
2.在AndroidManifest静态注册
<receiver android:name=".demo1.Disorder_receiver_1" >
<intent-filter android:priority="500"> //priority 优先级
<action android:name="com.aa" />
</intent-filter>
</receiver>
<receiver android:name=".demo1.Disorder_receiver_2">
<intent-filter android:priority="1000">
<action android:name="com.aa" />
</intent-filter>
</receiver>
3.创建receiver
- 1.新建BroadcastReceiver的子类
- 2.重写onReceive方法,可以在此处做接收到广播之后的操作
- 如果此接收者可以接收很多个广播,那么需要判断正在接收的广播的标志
public class Disorder_receiver_1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.aa")){
String name = intent.getStringExtra("name");
Log.d("aa", "onReceive: disorder_receiver1"+name);
}
}
}
public class Disorder_receiver_2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.aa")){
String name = intent.getStringExtra("name");
Log.d("aa", "onReceive: disorder_receiver2"+name);
abortBroadcast(); //无序广播 拦截无效 优先级还是有效的
}
}
}
有序广播
1.发送端
Intent intent = new Intent();
intent.putExtra("name","biao");
intent.setAction("com.bb");
sendOrderedBroadcast(intent,null);
2.静态注册
<receiver android:name=".demo2.Order_receiver_1" >
<intent-filter android:priority="500">
<action android:name="com.bb"/>
</intent-filter>
</receiver>
<receiver android:name=".demo2.Order_receiver_2">
<intent-filter android:priority="1000">
<action android:name="com.bb" />
</intent-filter>
</receiver>
2.动态注册
receiver1 = new Order_receiver_1();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.cc");
intentFilter.setPriority(500);
registerReceiver(receiver1,intentFilter);
receiver2 = new Order_receiver_2();
IntentFilter intentFilter1 = new IntentFilter();
intentFilter1.addAction("com.cc");
intentFilter.setPriority(1000);
registerReceiver(receiver2,intentFilter1);
3.创建receiver
public class Order_receiver_1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.bb")){
String name = intent.getStringExtra("name");
Log.d(TAG, "onReceive: receiver1"+name);
}
}
}
public class Order_receiver_2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.bb")){
String name = intent.getStringExtra("name");
Log.d(TAG, "onReceive: receiver2 "+name);
}
abortBroadcast(); //拦截广播,优先级priority高,先执行,进行拦截
}
}
4.取消注册
@Override
protected void onDestroy() {
super.onDestroy();
if (receiver!=null){
unregisterReceiver(receiver);
}
}
系统广播
1.网络状况
public class NetworkStateActivity extends AppCompatActivity {
TextView tv;
NetStatusReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network_state);
tv=(TextView)findViewById(R.id.net_tv);
receiver=new NetStatusReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(receiver,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (receiver!=null){
unregisterReceiver(receiver);
}
}
// 创建广播接收者,接收系统级别的广播
class NetStatusReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)){
// 获取网络连接管理者对象
ConnectivityManager manager=((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE));
NetworkInfo info=manager.getActiveNetworkInfo();
if (info!=null&&info.isAvailable()){
String name=info.getTypeName();
Toast.makeText(context,"当前网络名称:"+name,Toast.LENGTH_SHORT).show();
tv.setText(name);
}else {
Toast.makeText(context,"当前没有可用的网络",Toast.LENGTH_SHORT).show();
tv.setText("当前没有可用的网络");
}
}
}
}
}
2.电量
public class BatteryActivity extends AppCompatActivity {
TextView batteryTv;
BatteryReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_battery);
batteryTv=(TextView)findViewById(R.id.battery_tv);
receiver=new BatteryReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
class BatteryReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)){
// 目前电池的电量
int level=intent.getIntExtra("level",100);
// 获取电池的总电量
int total=intent.getIntExtra("scale",100);
// 获取当前电量的百分比
int current=level*100/total;
Log.i("hb","电池当前的电量:"+current+"%");
batteryTv.setText("电池当前电量"+current+"%");
}
}
}
}