从另一个应用程序中启动另一个应用程序

时间:2018-07-09 18:35:56

标签: android android-intent

我有2个应用程序:应用程序A和应用程序B。在应用程序A中,我可以单击一些将启动意图的应用程序,然后打开应用程序B。此意图将使用户进入不是该应用程序主要活动的活动。应用B,我们称之为ViewFormsActivity。这是在App A中点击的代码

Intent intent = new Intent("forms.ViewFormsActivity");
                intent.putExtra("formID", formID);
                intent.putExtra("siteID", siteID);
                intent.putExtra("tab", 0);
                intent.putExtra("prePopulatedURL", modifiedURL);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                try {
                    startActivity(intent);
                }
                catch (ActivityNotFoundException e){
                    e.printStackTrace();
                }

这是App B的清单

<activity
        android:name=".ViewFormsActivity"
        android:label="@string/title_activity_view_forms"
        android:exported="true"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppThemeNoTitleBar">

        <intent-filter>
            <action android:name="forms.ViewFormsActivity"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

此代码在尚未打开App B时有效。但是,如果我将App B留在主要活动上,然后切换到App A,然后执行单击;用户将被带到应用程序B的主活动页面。即使我在意图中指定了该功能,它也似乎并未将用户带到ViewFormsActivity。有谁知道原因以及如何解决?

3 个答案:

答案 0 :(得分:0)

intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)添加为标志,并将android:launchMode="singleTop"添加到接收活动清单中。

答案 1 :(得分:0)

如果要从另一个应用程序打开活动,则还必须包括ComponentName。

Intent intent = new Intent();
intent.setComponentName(new ComponentName(PACKAGE_NAME, com.something.something.forms.ViewFormsActivity.class));
intent.putExtra("formID", formID);
intent.putExtra("siteID", siteID);
intent.putExtra("tab", 0);
intent.putExtra("prePopulatedURL", modifiedURL);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

try {
    startActivity(intent);
} catch (ActivityNotFoundException e){
    e.printStackTrace();
}

答案 2 :(得分:0)

我通过将flag_activity_clear_top添加到App A的意图中解决了这个问题。

Intent intent = new Intent("forms.ViewFormsActivity");
                intent.putExtra("formID", formID);
                intent.putExtra("siteID", siteID);
                intent.putExtra("tab", 0);
                intent.putExtra("prePopulatedURL", modifiedURL);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

                try {
                    startActivity(intent);
                }
                catch (ActivityNotFoundException e){
                    e.printStackTrace();
                }