BroadcastReceiver
1.什么是广播
2.广播的分类及区别——有序广播和无序广播
3.广播的注册方式及区别——静态注册和动态注册
4.静态注册无序广播
5.静态注册有序广播
6.动态注册无序广播
7.动态注册有序广播
8.适配器中发送广播实例
9.Service中发送广播实例
什么是广播
1:广播是Android四大组件之一,全称BroadCastReceiver。
2:广播分为发送方和接收方,就算没有接收方,发送方也会发送数据。
3:广播可以实现跨多个页面的数据通信。
4:广播可以实现跨进程间的数据通信
广播的分类及区别——有序广播和无序广播
无序广播
所有监听该广播接受者都可以监听到该广播
同级别接收先后顺序是随机的(无序)
级别低的后收到广播
接收器不能截断广播的继续传播,也不能处理广播
有序广播
按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大优先级越高可以终止广播的继续传播,接受者可以修改intent的内容。
同级别接收顺序是随机的
级别低的后收到
能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。
能处理广播
广播的注册方式及区别——静态注册和动态注册
静态注册无序广播
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.example.MyReceiver.demo" />
</intent-filter>
</receiver>
静态注册有序广播
<receiver android:name=".MyReceiver">
<intent-filter android:priority="100">
<action android:name="com.example.MyReceiver.demo" />
</intent-filter>
</receiver>
动态注册无序广播
1.新建TestBroadcast类继承BroadcastReceiver
2.实现onReceive抽象方法,由于BroadcastReceiver是一个抽象类,定义了一个onReceive抽象方法,所以 必须实现此抽象方法
3.在代码中实例化TestBroadcast广播类
4.在代码中实例化IntentFilter。
5.调用IntentFilter对象addAction方法设置频道号
6.在有context环境中调用registerReceiver注册广播
7.在有context环境中通过sendBroadcast发送广播
8.在有context环境中通过unregisterReceiver注销广播
MyReceiver myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("");
registerReceiver(myReceiver,intentFilter);
动态注册有序广播
MyReceiver myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("");
intentFilter.setPriority(1000);
registerReceiver(myReceiver,intentFilter);
适配器中发送广播
通过context来调用sendBroadcast方法
Intent intent=new Intent();
intent.setAction("com.example.a17825.myapplication.price");
context.sendBroadcast(intent);
Service中发送广播
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://b.hiphotos.baidu.com/image/pic/item/96dda144ad345982b391b10900f431adcbef8415.jpg");
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
InputStream inputStream=connection.getInputStream();
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
Intent bitmapIntent=new Intent();
bitmapIntent.setAction("com.example.a17825.myapplication.background");
bitmapIntent.putExtra("bitmap",bitmap);
sendBroadcast(intent);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
}