Android广播机制

来源:互联网 发布:linux 文本编辑器 编辑:程序博客网 时间:2024/06/10 03:12

1.Android广播机制概述

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。

2.广播接收者

广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写:
public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据;

class MyReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            unregisterReceiver(this);        }    }

启动广播:

Intent intent = new Intent(us.mifeng);sendBroadcast(intent);finish();

静态注册:
直接在AndroidManifest.xml文件中进行注册。规则如下:

<receiver android:name=".MyReceiver">          <intent-filter>               <action android:name="us.mifeng"/>          </intent-filter>  </receiver> 

动态注册:
动态注册时,无须在AndroidManifest中注册组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver。registerReceiver的定义形式如下:

//注册广播        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction(us.mifeng);        registerReceiver(new MyReceiver(),intentFilter);

无序广播:

(1)广播发送者:

public class MainActivity extends Activity {      private Button button;      private OnClickListener listener = new OnClickListener(){          @Override          public void onClick(View v) {              Intent intent = new Intent();              intent.setAction("com.xiazdong");              intent.putExtra("name", "xiazdong");              MainActivity.this.sendBroadcast(intent);              Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();          }      };      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          button = (Button)this.findViewById(R.id.button);          button.setOnClickListener(listener);      }  }  

(2)广播接收者

public class Receiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {          String name = intent.getExtras().getString("name");          Log.i("Recevier1", "接收到:"+name);      }  }  

AndroidManifest.xml

<receiver android:name=".Receiver">          <intent-filter>               <action android:name="com.xiazdong"/>          </intent-filter>  </receiver>  

有序广播

(1)广播发送者

public class MainActivity extends Activity {      private Button button;      private OnClickListener listener = new OnClickListener(){          @Override          public void onClick(View v) {              Intent intent = new Intent();              intent.setAction("com.xiazdong");              intent.putExtra("name", "xiazdong");              MainActivity.this.sendOrderedBroadcast(intent, null);   //有序广播发送              Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();          }      };      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          button = (Button)this.findViewById(R.id.button);          button.setOnClickListener(listener);      }  }  

(2)广播接收者

public class Receiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {          String name = intent.getExtras().getString("name");          Log.i("Recevier1", "接收到:"+name);          abortBroadcast();   //Receiver1接收到广播后中断广播      }  }  

AndroidManifest.xml

[html] view plain copy

<receiver android:name=".Receiver">        <intent-filter android:priority="1000"> <!-- 设置最高优先级 -->           <action android:name="com.xiazdong"/>        </intent-filter>   </receiver>  
0 0
原创粉丝点击