播Android使用广播这种异步机制来处理组件之间的消息传递。所谓异步就是广的发送方和接收方不需要互相等待,对广播的接受并不会影响本身的正常工作。
收发广播:
1、发送广播
在应用层,通常发送方组件需要定义一个Intent对象,用于封装要发送的信息,并指定其action属性用于匹配,然后在组件中使用所在Content的sendBroadcast()方法,将Intent发送出去。
2、接收广播
接收方再接收某一个广播时,需要该广播在被发送之前,注册一个BroadcastReceiver(广播接受者),将其action属性设置为与要接收的广播的action属性相同的值。在注册BroadCastReceiver时,Android提供两种方法。一种是在java代码中调用registerReceiver()方法动态注册。另一种是在配置文件中使用标签静态注册。
下面分别通过具体的例子看两种方法的使用。
示例1:动态注册BroadcastReceiver
public class MainActivity extends Activity {
private BroadcastReceiver br=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int level = intent.getIntExtra("level", 0);// level:系统所提供的得到当前电量的一个键
int scale = intent.getIntExtra("scale", 100);
tv.setText(level * 100 / scale + "%");
}
};
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.textView1);
registerReceiver(br, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
}
示例2:静态注册BroadcastReceiver
程序入口文件:MainActivity.java:public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent =new Intent(this,MyBroadcastReveiver.class);
intent.putExtra("message", "Hello");
sendBroadcast(intent);
}
}
MyBroadcastReveiver.java
public class MyBroadcastReveiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
System.out.println(intent.getStringExtra("message"));
}
}
在配置文件中注册: