假设我们有一个活动,我们项目中的一个intentservice和一个广播接收器都在不同的java文件中分开。任何人都可以扩展地说明intentservice获取GCM推送消息的场景,广播接收者通知活动有关传入消息的信息,活动会立即通过文本框显示消息吗? 提前谢谢。
答案 0 :(得分:1)
这是怎么做的。
第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()
只是我作为效用函数创建的一种方法