主活动在后台运行时如何启动活动?

时间:2010-01-10 12:13:39

标签: android android-activity

我创建了一个应用程序,使用户可以在应用程序以后台模式运行时设置是否要接收通知。如果启用了通知,则应启动活动(对话框应显示在屏幕上)。

我尝试按以下方式启用它:

@Override
public void onProductsResponse(List<Product> products) {
    this.products = products;
    moboolo.setProducts(products);
    if(moboolo.getAutomaticNotificationsMode() != 0 && products.size() > 0){
        if(isRunningInBackground)
        {
            Intent intent = new Intent(this, ProductListActivity.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }
    }
    drawProducts(products);

}

这是主要活动的方法。当onPause()执行时,isRunningInBackground设置为true。 当我在主应用程序在后台运行时尝试调试它

startActivity(intent)没有效果(活动没有出现)。

当主要活动在后台运行时(调用onPause()之后)有没有人知道如何中断逻辑以便从主活动启动活动?

谢谢。

3 个答案:

答案 0 :(得分:7)

您无法强制Activity从运行后台的应用程序中显示。 The documentation says

  

如果应用程序在后台运行并需要用户注意,应用程序应创建一个通知,允许用户在他或她方便时做出响应。

如果暂停Activity,则用户可能会在其他应用中执行其他操作,并且可能不希望您的Activity突然出现在他们当前所做的事情之上。

您应该使用Status Bar Notification。这允许您的应用程序在状态栏中放置一个图标。然后,用户可以向下滑动状态栏抽屉并单击您的通知以打开您的应用程序并显示相关的Activity。这是绝大多数Android应用在后台运行时通知用户的方式。

答案 1 :(得分:4)

要完成Hemendra的答案,除了{{1}}之外,你不需要任何其他标志。您只需要从正常意图创建PendingIntent并调用新的PendingIntent的send()方法来调度intent。我是这样做的:

{{1}}

答案 2 :(得分:2)

Intent i= new Intent("android.intent.category.LAUNCHER");
i.setClass(getApplicationContext(), MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent i2 = PendingIntent.getActivity(getApplicationContext(), 0, insIntent,Intent.FLAG_ACTIVITY_NEW_TASK);
try {
     i2.send(getApplicationContext(), 0, i);
} catch (Exception e) {
     e.printStackTrace();
}

在MyActivity的onCreate上......

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

如果主要活动在后台运行,这会将您的活动带到前台事件。