BroadCastReceiver

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值