81

我的应用程序 A 定义如下:

<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 中的活动?谢谢!

4

2 回答 2

161

如果你们面临“Permission Denial:starting Intent ...”错误,或者如果应用程序在启动应用程序期间无故崩溃 - 然后在 Manifest 中使用此单行代码

android:exported="true"

请小心完成();,如果你错过了它,应用就会被冻结。如果它提到该应用程序将是一个流畅的启动器。

finish();

另一种解决方案仅适用于同一应用程序中的两个活动。就我而言,应用程序 B 不知道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();
}
于 2010-02-05T20:09:00.793 回答
15

如果两个应用程序具有相同的签名(这意味着两个 APPS 都是您的并使用相同的密钥签名),您可以调用您的其他应用程序活动,如下所示:

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

希望能帮助到你。

于 2014-01-04T23:17:22.003 回答