Search code examples
androidstart-activitycross-application

How to start activity in another application?


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!


Solution

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