1.什么是广播
“全局的监听器”
2.广播的分类和区别–有序广播和无序广播
所有对应的接收器都收到该广播,但是会按照广播接收者的排序和优先级来决定接收的先后顺序
所有对应的接收器都收到该广播,并且是没有先后顺序
3.广播的注册方式和区别–静态注册和动态注册
静态注册:
<receiver android:name="com.example.test.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MyBroadcastReceiver"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</receiver>
动态注册:
MyBroadcastReceiver receiver=new MyBroadcastReceiver(); (这里可以写系统的广播接收者重写onReceiver方法就可以)
IntentFilter filter=new IntentFilter();
filter.addAction("android.intent.action.MyBroadcastReceiver");
registerReceiver(receiver, filter);
.4.静态注册无序广播
新建类继承BroadcastReceiver
实现onReceive抽象方法。
在AndroidManifest中注册BroadReceiver
5.静态注册有序广播
public class BroadcastActivity extends AppCompatActivity implements View.OnClickListener {
private Button broadcast_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast);
broadcast_btn = findViewById(R.id.broadcast_btn);
broadcast_btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.broadcast_btn:
Intent intent=new Intent();
intent.setAction("Intercept_Stitch");
Bundle bundle=new Bundle();
bundle.putString("name","123");
intent.putExtras(bundle);
sendOrderedBroadcast(intent,null);
break;
default:
break;
}
}
}
6.动态注册无序广播
1.新建TestBroadcast类继承BroadcastReceiver。
2.实现onReceive抽象方法,由于BroadcastReceiver是一个抽象类,定义了一个onReceive抽象方法,所以必须实现此抽象方法。
3.在代码中实例化TestBroadcast广播类
4.在代码中实例化IntentFilter。
5.调用IntentFilter对象addAction方法设置频道号
6.在有context环境中调用registerReceiver注册广播
7.在有context环境中通过sendBroadcast发送广播
8.在有context环境中通过unregisterReceiver注销广播
7.动态注册有序广播
public class MainActivity extends ActionBarActivity {
private static final String MY_BROADCAST_ACTION = "com.example.mybroadcastreceiver.my_broadcast_action";
private FirstBroadCast firstBroadCast;
private TwiceBroadCast twiceBroadCast;
private ThirdBroadCast thirdBroadCast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstBroadCast = new FirstBroadCast();
IntentFilter filter1 = new IntentFilter();
filter1.addAction(MY_BROADCAST_ACTION);
filter1.setPriority(1000);
registerReceiver(firstBroadCast, filter1);
twiceBroadCast = new TwiceBroadCast();
IntentFilter filter2 = new IntentFilter();
filter2.addAction(MY_BROADCAST_ACTION);
filter1.setPriority(5);
registerReceiver(twiceBroadCast, filter2);
thirdBroadCast = new ThirdBroadCast();
IntentFilter filter3 = new IntentFilter();
filter3.addAction(MY_BROADCAST_ACTION);
filter1.setPriority(6);
registerReceiver(thirdBroadCast, filter3);
}
public void sendBroadCast(View v){
Intent intent = new Intent();
intent.setAction(MY_BROADCAST_ACTION);
intent.putExtra("data", "123");
sendOrderedBroadcast(intent, null, null, null, 1, "10000", null);
}
registerReceiver方法注册
class FirstBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (MY_BROADCAST_ACTION.equals(action)) {
String data = intent.getStringExtra("data");
Toast.makeText(context,
"FirstBroadCast" + data, 1).show();
System.out.println("FirstBroadCast" + data);
}
}
}
class TwiceBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (MY_BROADCAST_ACTION.equals(action)) {
String data = intent.getStringExtra("data");
Toast.makeText(context,
"TwiceBroadCast" + data, 1).show();
System.out.println("TwiceBroadCast" + data);
}
}
}
class ThirdBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (MY_BROADCAST_ACTION.equals(action)) {
String data = intent.getStringExtra("data");
Toast.makeText(context,
"ThirdBroadCast" + data, 1).show();
System.out.println("ThirdBroadCast" + data);
}
}
}
8.适配器中发送广播的示例
private void broad(){
Intent intent = new Intent("com.example.yang.paopao.shopping");
context.sendBroadcast(intent);
}
9.Service中发送广播的示例
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
int i = 0;
while (true) {
Intent intent = new Intent();
intent.putExtra("progress", i);
intent.setAction("android.intent.action.progress");
sendBroadcast(intent);
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
10.常用的系统广播及其用法
常用的系统广播有:网络,电量,短信,来电
private NetWorkReceiver netWorkReceiver=new NetWorkReceiver();
IntentFilter intentFilter1=new IntentFilter();
intentFilter1.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerRecei