Android 如何在另一个应用程序中启动活动?

Android 如何在另一个应用程序中启动活动?,android,start-activity,cross-application,Android,Start Activity,Cross Application,我的应用程序定义如下: <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="com.example.MyExampleActivity" android:label="@string/app_name"> <intent-filter>

我的应用程序定义如下:

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name="com.example.MyExampleActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

现在在应用程序B中,如何编写代码来启动应用程序A中的活动?谢谢

如果你们面临“权限拒绝:启动意图…”错误,或者应用程序在启动过程中无缘无故崩溃,请在清单中使用此单行代码

android:exported="true"
请小心饰面(),如果你错过了,应用程序就会冻结。如果它提到的应用程序将是一个平稳的启动

finish();
另一种解决方案仅适用于同一应用程序中的两个活动。在我的例子中,应用程序B不知道代码中的class
com.example.MyExampleActivity.class
,因此编译将失败

我在网上搜索了一下,在下面找到了类似的东西,效果很好

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example", "com.example.MyExampleActivity"));
startActivity(intent);
您还可以使用setClassName方法:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.hotfoot.rapid.adani.wheeler.android", "com.hotfoot.rapid.adani.wheeler.android.view.activities.MainActivity");
startActivity(intent);
finish();
您还可以将值从一个应用程序传递到另一个应用程序:

Intent launchIntent = getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.hotfoot.rapid.adani.wheeler.android.LoginActivity");
if (launchIntent != null) {
    launchIntent.putExtra("AppID", "MY-CHILD-APP1");
    launchIntent.putExtra("UserID", "MY-APP");
    launchIntent.putExtra("Password", "MY-PASSWORD");
    startActivity(launchIntent);
    finish();
} else {
    Toast.makeText(getApplicationContext(), " launch Intent not available", Toast.LENGTH_SHORT).show();
}

如果两个应用程序具有相同的签名(意味着两个应用程序都是您的,并且使用相同的密钥进行了签名),您可以按如下方式调用其他应用程序活动:

Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(CALC_PACKAGE_NAME);
startActivity(LaunchIntent);

希望有帮助。

很高兴看到这个答案!然而,在我的例子(Android 4.2)中,我得到了“权限拒绝:启动意图…”错误。有什么线索吗?@JackWM将android:exported=“true”添加到您的活动中property@JackWM如果您尝试启动的活动具有意图过滤器,则它也会起作用。这是因为当存在意图过滤器时,
android:exported
XML属性的默认值为
true
。现在,当您从第一个应用程序启动第二个应用程序的活动时,关于如何在第二个应用程序中以编程方式获取该活动(或应用程序)的任何线索开始那个活动?答案当然是第一个应用程序,但如何以编程方式在第二个应用程序中获得它?嗯,不适合我。我有两个应用程序,每个都有一个活动:
com.examplea.MainActivityA
com.exampleb.MainActivityB
。我从MainActivityA运行您的代码片段,其中包含字符串“com.exampleb”和“com.exampleb.MainActivityB”。但是,我只得到了
android.content.ActivityNotFoundException:找不到显式活动类{com.exampleb/com.exampleb.MainActivityB};您是否在AndroidManifest.xml中声明了此活动?
您不需要两个应用都具有相同的签名。例如,您可以使用以下命令启动谷歌地图:Intent i=getPackageManager().getLaunchIntentForPackage(“com.Google.android.apps.Maps”)@TimAutin如果我需要启动一个属于我无法控制的应用程序的特定活动,该怎么办?我从来没有这样做过,所以我不知道。你试过这个答案吗?