分开的活动,intentservice和broadcastreveiver

时间:2015-01-29 22:23:18

标签: android broadcastreceiver intentservice

假设我们有一个活动,我们项目中的一个intentservice和一个广播接收器都在不同的java文件中分开。任何人都可以扩展地说明intentservice获取GCM推送消息的场景,广播接收者通知活动有关传入消息的信息,活动会立即通过文本框显示消息吗? 提前谢谢。

1 个答案:

答案 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()只是我作为效用函数创建的一种方法