Android动态注册广播,发送和接受消息。
Android Activity传值方式有多重,常见的有静态类传值,intent传值,SharedPreferences,以及广播传值等方式。
接下来我在这里演示一下如何通过广播发送数据,如何在activity中动态注册,接受数据。
1,在项目中创建自定义广播类 代码如下。
public class AmosBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
2,如何发送一个实体类的广播?
2.1 deviceMode为实体类,该类必须implements Serializable
public class DeviceMode implements Serializable {
public String str_Command;
public String getStr_Command() {
return str_Command;
}
public void setStr_Command(String str_Command) {
this.str_Command = str_Command;
}
}
2.2 实例化后填充数据在需要发送数据的地方putExtra
Intent intent = new Intent();
intent.setAction("com.amos.demo");
intent.putExtra("deviceValue",deviceMode);
sendBroadcast(intent);
3,在activity中广播的使用
3.1使用前先注册
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.amos.demo");
registerReceiver(mReceiver,intentFilter);
3.2数据的接收和处理
private AmosBroadCastReceiver mReceiver = new AmosBroadCastReceiver() {
public void onReceive(Context arg0, Intent intent) {
String action = intent.getAction();
if("com.amos.demo".equals(action))
{
DeviceMode deviceMode= (DeviceMode) intent.getSerializableExtra("deviceValue");
if(deviceMode!=null) {
int commandValue = Integer.parseInt(deviceMode.getStr_Command());
runOnUiThread(new Runnable() {
@Override
public void run() {
//接收后的数据在线程更新UI
}
});
}
}
}
};
3.3 使用完毕后要注销
unregisterReceiver(mReceiver); // 注销广播接收器
4,其他
广播是可以一对多的,发送者不用管是否有接收者,在发送的时候intent.setAction("com.amos.demo"); 这个相当于广播的标志或名称,今后我们可以通过这个来辨别是谁发送出来的。