Android 广播

来源:互联网 发布:深圳市软件协会网站 编辑:程序博客网 时间:2024/05/16 11:08

Android 广播

1.系统全局广播

接收广播

动态接收

基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)
2. 实例化IntentFilter,添加对应action
3. 注册接收器registerReceiver()
4. 取消注册

public class MainActivity extends Activity {    private MyBroadcastReceiver myBroadcastReceiver;    private IntentFilter intentFilter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intentFilter = new IntentFilter();intentFilter.addAction("android.intent.action.INPUT_METHOD_CHANGED");//切换输入法时的系统广播        myBroadcastReceiver = new MyBroadcastReceiver();        registerReceiver(myBroadcastReceiver, intentFilter);    class MyBroadcastReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {Toast.makeText(context,"MyBroadcastReceiver.active.net change", Toast.LENGTH_SHORT).show();            //这里只是弹出了一个toast,可进行其他处理如打开一个activity        }    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(myBroadcastReceiver);    }}

静态接收

基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理),非内部类
2. 在manifest文件中添加一个标签receiver,并添加子标签intent-filter,action

//MyBroadcastReceiver.classpublic class MyBroadcastReceiver extends BroadcastReceiver{    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, intent.toString() + "MyBroadcastReceiver.static", Toast.LENGTH_LONG).show();        //这里只是弹出了一个toast,可进行其他处理如打开一个activity    }}//manifest<receiver android:name=".MyBroadcastReceiver" >            <intent-filter>                <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />            </intent-filter>        </receiver>

发送广播

标准广播

  1. Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出
  2. 发送广播,sendBroadcast()
Intent intent = new Intent("example.broadcasttest.MYBROADCAST");                intent.putExtra("name", "Tom");                sendBroadcast(intent);

接收次广播的action为

intentFilter.addAction("example.broadcasttest.MYBROADCAST");

有序广播

和标准广播就一个区别,就使用sendOrderBroadcast()发送

2.本地广播

发送广播

  1. Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出
  2. 获得LocalBroadcastManager实例
  3. 发送广播,localBroadcastManager.sendBroadcast()
localBroadcastManager = LocalBroadcastManager.getInstance(this);Intent intent = new Intent("example.broadcasttest.MYBROADCAST");intent.putExtra("name", "Tom");localBroadcastManager.sendBroadcast(intent);

接收广播

只有动态接收
基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)
2. 实例化IntentFilter,添加对应action
3. 获得LocalBroadcastManager实例
4. 注册接收器localBroadcastManager.registerReceiver()
5. 取消注册localBroadcastManager.unregisterReceiver();

public class MainActivity extends Activity {    private MyBroadcastReceiver myBroadcastReceiver;    private IntentFilter intentFilter;    private LocalBroadcastManager localBroadcastManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intentFilter = new IntentFilter();intentFilter.addAction("example.broadcasttest.MYBROADCAST");        myBroadcastReceiver = new MyBroadcastReceiver();        localBroadcastManager = LocalBroadcastManager.getInstance(this);        localBroadcastManager.registerReceiver(myBroadcastReceiver , intentFilter);    class MyBroadcastReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {        String name = intent.getStringExtra("name");//接收extra数据            Toast.makeText(context, "MyBroadcastReceiver.active", Toast.LENGTH_SHORT).show();        }    }    @Override    protected void onDestroy() {        super.onDestroy();    localBroadcastManager.unregisterReceiver(localMyBroadcastReceiver);//取消注册    }}

3.本地广播和全局广播

发送全局广播:所有应用都能接收到
发送本地广播:只有本应用内可以接收
本地广播更安全,在没有必要的情况下最好发本地广播
另外,本地广播接收器只接受本地广播,本地广播也只能被本地广播接收器接收,如下面关系

    本地广播------>本地广播-------------------------------------------    全局广播------>全局广播

4.标准广播和有序广播

标准广播:所有接收器几乎同时收到广播,无法被截断,效率高
有序广播:按优先级顺序一个一个接收,当一个广播逻辑处理完才会往下传,可被截断。

5.静态接收和动态接收

动态接收:只能在程序启动后接收广播
静态接收:未启动也能接收,所以要实现开机自启自能静态注册

0 0
原创粉丝点击