webentwicklung-frage-antwort-db.com.de

Wie starte ich eine Aktivität in einer anderen Anwendung?

Ich habe Anwendung A wie folgt definiert:

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

Wie kann ich nun in Anwendung B den Code schreiben, um die Aktivität in Anwendung A zu starten? Vielen Dank!

75
user256239

Wenn bei Ihnen die Fehlermeldung "Berechtigungsverweigerung: Absicht wird gestartet ..." angezeigt wird oder die App beim Starten der App ohne Grund abstürzt, verwenden Sie diesen Code in Manifest

Android:exported="true"

Bitte seien Sie vorsichtig mit finish (); Wenn du es verpasst hast, wird die App eingefroren. Wenn es erwähnt wird, wäre die App ein flüssiger Launcher.

finish();

Die andere Lösung funktioniert nur für zwei Aktivitäten, die sich in derselben Anwendung befinden. In meinem Fall kennt Anwendung B die Klasse com.example.MyExampleActivity.class Im Code nicht, daher schlägt das Kompilieren fehl.

Ich habe im Internet gesucht und unten etwas Ähnliches gefunden, und es funktioniert gut.

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

Sie können auch die Methode setClassName verwenden:

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

Sie können die Werte auch von einer App an eine andere App übergeben:

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

Wenn beide Anwendungen dieselbe Signatur haben (dh beide APPS gehören Ihnen und sind mit demselben Schlüssel signiert), können Sie Ihre andere App-Aktivität wie folgt aufrufen:

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

Ich hoffe es hilft.

16
azelez