Sco*_*ler 1 android android-intent
我目前有两个单独的应用程序,都执行单独的任务,但是当我需要一个应用程序使用另一个应用程序时,在有限的场合时间.
所以我用一个函数来检查所需的应用程序是否存在:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果是,那么我使用以下内容在那里开始一个额外的活动:
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);
}
Run Code Online (Sandbox Code Playgroud)
setFlags表示如果用户按下home,然后他们返回第一个应用程序,它会打开,它不会打开这里调用的第二个应用程序.
这一切都很好,第一次.然而,在第二次调用它之后,第二个应用程序恢复,所以它没有获取已经通过的"额外",我怎样才能确保我得到额外的?
我的问题的最终答案是使用以下内容:
我创建了一个函数来处理加载意图附加功能:
private void handleIntent(Intent intent)
{
Bundle extras = intent.getExtras();
if (extras != null)
{
place = extras.getString("place");
}
}
Run Code Online (Sandbox Code Playgroud)
在onCreate我使用:
handleIntent(getIntent());
Run Code Online (Sandbox Code Playgroud)
然后添加以下函数以在现有活动实例传递新intent时获取意图:
public void onNewIntent(Intent intent)
{
setIntent(intent);
handleIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
我还android:launchMode="singleInstance"使用上面的代码添加到活动清单中的活动声明中.
最后从第一个包中,我现在可以使用以下代码来启动第二个包.当第二个软件包启动时,用户可以点击第一个软件包(从主启动器)并获得他们期望的应用程序,如果他们单击以启动第二个软件包,则会显示"已在运行"的实例,但会捕获新的软件包额外的已通过:
Intent i = new Intent("com.me.myapp.MY_MAP");
i.putExtra("place", place);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
希望这对某人有所帮助 - 这可能不是最好的方法,但它对我有用.
| 归档时间: |
|
| 查看次数: |
5249 次 |
| 最近记录: |