How to start activity in another application?

2019-01-01 08:25发布

问题:

I have application A defined as below:

<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>

Now in application B, how can I write the code to start the activity in application A? Thanks!

回答1:

If you guys are facing \"Permission Denial: starting Intent...\" error or if the app is getting crash without any reason during launching the app - Then use this single line code in Manifest

android:exported=\"true\"

Please be careful with finish(); , if you missed out it the app getting frozen. if its mentioned the app would be a smooth launcher.

finish();

The other solution only works for two activities that are in the same application. In my case, application B doesn\'t know class com.example.MyExampleActivity.class in the code, so compile will fail.

I searched on the web and found something like this below, and it works well.

Intent intent = new Intent();
intent.setComponent(new ComponentName(\"com.example\", \"com.example.MyExampleActivity\"));
startActivity(intent);

You can also use the setClassName method:

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();

You can also pass the values from one app to another app :

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();
}


回答2:

If both application have the same signature (meaning that both APPS are yours and signed with the same key), you can call your other app activity as follows:

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

Hope it helps.