BroadcastReceiver

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);
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值