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"); 这个相当于广播的标志或名称,今后我们可以通过这个来辨别是谁发送出来的。

 

 

 

 

posted @ 2020-02-06 14:36  snbill  阅读(2731)  评论(0编辑  收藏  举报