2010-10-21 58 views
1

我目前有两个独立的应用程序,两者都执行独立的任务,但是在有限的时间里,当我需要一个应用程序使用另一个应用程序时,如果有的话。活动生命周期 - startActivity()附加项目

所以我用一个函数来检查所需的应用程序存在:

public static boolean isIntentAvailable(Context context, String action) 
{ 
    final PackageManager packageManager = context.getPackageManager(); 
    final Intent intent = new Intent(action); 
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
    return list.size() > 0; 
} 

如果是这样,那么我用下面用一个额外的启动活动上有:

if (isIntentAvailable(ListPOI.this, "com.me.myapp.MY_MAP")) 
{ 
    Intent i = new Intent("com.me.myapp.MY_MAP"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.putExtra("place", true); 
    startActivity(i); 
} 

的setFlags意味着如果用户按回家,他们回到第一个应用程序,它打开,它不打开这里调用的第二个应用程序。

这一切都工作正常,第一次。然而,第二次调用此应用程序后,第二个应用程序会继续运行,因此它不会接收已通过的“额外”应用程序,如何确保获得额外的应用程序?

+1

我可以想到两件事,我不会将它作为答案发布,因为我不知道: 1)如何迫使活动完成onStop 2)获取onResume而不是onCreate的意图? – blindstuff 2010-10-21 20:49:41

+0

这工作 - 从来没有在onResume() – Scoobler 2010-10-21 22:17:29

回答

8

最后回答我的问题已经使用下列内容:

我创建了一个函数来处理加载意图演员:

private void handleIntent(Intent intent) 
{ 
    Bundle extras = intent.getExtras(); 
    if (extras != null) 
    { 
     place = extras.getString("place"); 
    } 
} 

在的onCreate我用:

handleIntent(getIntent()); 

然后添加以下函数以获取活动的现有实例通过新的意图时的意图:

public void onNewIntent(Intent intent) 
{ 
    setIntent(intent); 
    handleIntent(intent); 
} 

我还使用上面的代码将android:launchMode="singleInstance"添加到活动清单中的活动声明中。

最后从第一个包中,我现在可以使用下面的代码来启动另一个包。当第二个软件包启动时,用户可以点击第一个软件包(从主页启动器)并获得他们期望的应用程序,如果他们点击启动第二个软件包,则会显示“正在运行”的实例,但捕获新的额外的已经过去了:

Intent i = new Intent("com.me.myapp.MY_MAP"); 
i.putExtra("place", place); 
startActivity(i); 

希望这将是有益的人 - 它可能没有做到这一点的最好办法,但它为我工作。

1

这不是flag_activity_new_task的意思。这些标志只对在您的流程中开始的活动有意义。启动另一个应用程序的活动将始终将其作为新任务启动,并在新流程中使用新堆栈。

显然我错了。 Activities defined in different applications can share an affinity。我不知道。尽管如此,我仍然不清楚你想要发生什么。

你是什么意思“第二次打电话”。第二次是什么?它恢复了什么?你在期待什么?

+0

拿起意图额外的thoguht如果我删除setFlags,我点击按钮来启动新的“其他”应用程序其负载显示我想要的。用户回到家中,点击第一个应用程序再次打开它,而不是第一个应用程序,显示'其他'的应用程序 - 与标志似乎并没有发生。至于第二次调用:用户点击按钮,其他应用程序加载显示传递的额外结果。如果用户返回到第一个应用程序并再次按下该按钮,则恢复其他应用程序的原始版本,使用原来的额外按钮而不是新按钮按下的新按钮。 – Scoobler 2010-10-21 21:13:01

+0

获取onResume而不是onCreate的意图。 – blindstuff 2010-10-21 21:22:31

+0

通过应用程序您的意思是活动?活动和应用程序不是一回事。 – Falmarri 2010-10-21 21:34:20