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

Android 当主活动在后台运行时,如何启动活动?,android,android-activity,Android,Android Activity,我创建了一个应用程序,允许用户设置在后台模式下运行应用程序时是否希望接收通知。如果启用了通知,则应启动活动(该对话框应显示在屏幕上) 我尝试通过以下方式启用它: @Override public void onProductsResponse(List<Product> products) { this.products = products; moboolo.setProducts(products); if(moboolo.getAutomaticNoti

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

我尝试通过以下方式启用它:

@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);

}
@覆盖
公共产品响应无效(列出产品){
这一点。产品=产品;
moboolo.setProducts(产品);
if(moboolo.getAutomaticNotificationsMode()!=0&&product.size()>0){
如果(正在运行背景)
{
Intent Intent=新的Intent(这个,ProductListActivity.class);
intent.setAction(intent.ACTION_MAIN);
星触觉(意向);
}
}
产品(产品),;
}
这是主要活动中的方法。执行onPause()时,IsRunningBackground设置为true。 当我试图在主应用程序在后台运行时调试它时

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

当主活动在后台运行时(在调用onPause()之后),是否有人知道如何MIDI逻辑以从主活动启动活动


谢谢。

您不能强制运行后台的应用程序显示
活动

如果应用程序在后台运行并且需要用户的注意,应用程序应该创建一个通知,允许用户在方便时响应

如果您的
活动
被暂停,用户可能正在其他应用程序中执行其他操作,并且可能不希望您的
活动
突然出现在他们当前正在执行的操作之上

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

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);

如果主要活动在后台运行,这将使您的活动出现在事件前面。

要完成Hemendra的回答,您不需要任何这些标志,只需要将活动重新排序到前面。您只需要根据您的普通意图创建一个PendingEvent,并调用新PendingEvent的send()方法来分派该意图。我是这样做的:

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();
}
Intent yourIntent = new Intent(this, YourActivity.class);
// You can send extra info (as a bundle/serializable) to your activity as you do 
// with a normal intent. This is not necessary of course.
yourIntent.putExtra("ExtraInfo", extraInfo); 
// The following flag is necessary, otherwise at least on some devices (verified on Samsung 
// Galaxy S3) your activity starts, but it starts in the background i.e. the user
// doesn't see the UI
yourIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
                                                        yourIntent, 0);
try {
    pendingIntent.send(getApplicationContext(), 0, yourIntent);
} catch (Exception e) {
    Log.e(TAG, Arrays.toString(e.getStackTrace()));
}

谢谢你,在这里使用一个悬挂式帐篷对我来说是关键。之前我试着直接调用startActivity,但没有成功。