假设我们的项目中有一个活动,一个意图服务和一个广播接收器,它们都在不同的java文件中分开。任何人都可以扩展解释意图服务获取GCM推送消息,广播接收器通知活动有关传入消息并且活动立即通过文本框显示消息的场景吗?提前谢谢你。
这是怎么做到的。
步骤 1 创建一个基本活动,所有其他活动都应扩展它。
步骤 2 在自定义应用程序(例如MyApplication.class
)类中添加以下四个方法和两个变量
private static boolean activityVisible = false;
private static Context activityOnTop = null;
public static boolean isActivityVisible() {
return activityVisible;
}
public static Context getActivityOnTop(){
return activityOnTop;
}
public static void activityResumed(Context classContext) {
activityVisible = true;
activityOnTop = classContext;
}
public static void activityPaused() {
activityVisible = false;
}
步骤 3 在基本活动(所有其他活动都在扩展)中执行此操作
@Override
protected void onResume() {
super.onResume();
MyApplication.activityResumed(this);
}
@Override
protected void onPaused() {
super.onPaused();
MyApplication.activityPaused(this);
}
步骤 4 在广播接收器中,当您收到通知事件时,执行此操作
if(!MyApplication.isActivityVisible()){
//Show notification when app is not visible to user
return;
}
Context currContext = MyApplication.getActivityOnTop();
if(currContext == null)
return;
String currentActivity = currContext.getClass().getName();
if(!Strings.isNullOrEmpty(currentActivity)) {
try {
Intent i = new Intent(context, Class.forName(currentActivity));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// Add the push notification message in the bundle here
context.startActivity(i);
}
catch (ClassNotFoundException e){
}
}
步骤 5 在您的基本活动中执行此操作
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//get push notification message in the bundle here and show the dialog
// DO NOT USE getIntent() here. USE THE intent THAT IS PASSED AS PARAMETER
}
注意:
Strings.isNullOrEmpty()
只是我作为实用程序函数创建的方法