我有一个使用C2DM服务的Android应用程序(也就是推送)。
我有一个单独的类来实现注册过程并接收数据(并扩展BroadcastReceiver)。
我想将此数据传达给当前位于前台的活动。当前位于前台的活动可能因用户操作而异。
在接收者和当前活动之间进行通信的最佳方式是什么?
感谢。
答案 0 :(得分:2)
我通过从C2DMReceiver类发送一个新广播解决了这个问题,看起来像这样。
C2DMReceiver类:
public class C2DMReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
handleRegistration(context, intent);
} else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
handleMessage(context, intent);
}
}
private void handleRegistration(Context context, Intent intent) {
// handle registration
}
private void handleMessage(Context context, Intent intent) {
Intent i = new Intent("push");
i.putExtras(intent);
// context.sendOrderedBroadcast(i, null);
context.sendBroadcast(i);
}
}
我称之为PushReceiver的另一个类。这是将扩展BroadcastReceiver并接收C2DMReceiver发送的广播的类。
public class PushReceiver extends BroadcastReceiver {
public PushReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// do stuff
abortBroadcast();
}
public static class PushFilter extends IntentFilter {
private static final int DEFAULT_PUSH_PRIORITY = 1;
public PushFilter() {
this(DEFAULT_PUSH_PRIORITY);
}
public PushFilter(int priority) {
super("push");
setPriority(priority);
}
}
}
活动类,在本例中称为MyActivity。如果您使用所有其他活动扩展的基本活动类,这应该可以正常工作。这样每个活动都会注册接收器。通过在onResume / onPause中进行注册/取消注册,您应该能够保证只有当前活动接收广播。如果没有,您可以从C2DMReceiver发送有序广播,并在PushFilter中使用优先级。
public class MyActivity extends Activity {
private PushReceiver pushReceiver;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// your onCreate method
pushReceiver = new PushReceiver();
}
public void onResume() {
super.onResume();
// your onResume method
registerReceiver(pushReceiver, new PushReceiver.PushFilter());
}
public void onPause() {
super.onPause();
// your onPause method
unregisterReceiver(pushReceiver);
}
}
就我而言,我编写了PushReceiver构造函数来获取一个View,然后在onReceive方法中使用视图“做了一些东西”。如果不了解你想做什么,我就不能详细说明这一点,但希望这可以提供一个体面的模板来工作。