BroadcastReceiver 最好作为内部类文章分类:移动开发BroadcastReceiver
大家对BroadcastReceiver 最熟悉的似乎是: sendBroadcast(Intent) registerReceiver(BroadcastReceiver,IntentFilter)
BroadcastReceiver 作为一个独立的class 会有一些棘手的问题 挡在大家面前 1. 如何把得到的信息返回给某个Thread 2. 代码比较零散 有一些阅读障碍
所以说 BroadcastReceiver 最好作为内部类
[代码] 1. 先定义一些供 Broadcast 与 Message 有关的字串 供BroadcastReceiver使用
public class BroadcastColumn { //Broadcast format definition: Broadcast_[destination] public final static String BROADCAST_TaskB = "Broadcast_TaskB"; //Message format definition: Message_[what] public final static String MESSAGE_STRING = "Message_string"; }
2. 定义 MessageListenerHelper extends BroadcastReceiver 并把 registerReceiver() 也放入其中
public class MessageListenerHelper extends BroadcastReceiver { Context context; MessageListenerHelper listener; //construct public MessageListenerHelper(Context c){ context = c; //to instance it listener = this; } public void registerAction(String action){ IntentFilter filter = new IntentFilter(); filter.addAction(action); context.registerReceiver(listener,filter); } @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub Bundle b = arg1.getExtras(); if(b.containsKey(BroadcastColumn.MESSAGE_STRING)){ String string = b.getString(BroadcastColumn.MESSAGE_STRING); Log.d("TAG",string); } } }
3. 定义 MessageListenerHelper 实例 并 注册
MessageListenerHelper listener = new MessageListenerHelper(this); listener.registerAction(BroadcastColumn.BROADCAST_TaskB);
done!
|
|