574 Stimmen

So starten Sie eine Aktivität aus einer anderen Anwendung in Android

Ich möchte ein installiertes Paket aus meiner Android-Anwendung heraus starten. Ich gehe davon aus, dass dies mit Intents möglich ist, aber ich habe keine Möglichkeit gefunden, dies zu tun. Gibt es einen Link, wo man die Informationen finden kann?

2 Stimmen

Was passiert, wenn ich die zweite App von der ersten aus öffne und dann direkt auf das Symbol der zweiten App klicke, erhalte ich zwei Instanzen der App, was nicht erwünscht ist. Wie kann ich damit umgehen?

0 Stimmen

17voto

Tine M. Punkte 398

Hier ist mein Beispiel für das Starten eines Bar-/QR-Code-Scanners aus meiner Anwendung, falls es jemand nützlich findet

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");

try 
{
    startActivityForResult(intent, SCAN_REQUEST_CODE);
} 
catch (ActivityNotFoundException e) 
{
    //implement prompt dialog asking user to download the package
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(this);
    downloadDialog.setTitle(stringTitle);
    downloadDialog.setMessage(stringMessage);
    downloadDialog.setPositiveButton("yes",
            new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialogInterface, int i) 
                {
                    Uri uri = Uri.parse("market://search?q=pname:com.google.zxing.client.android");
                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    try
                    {
                        myActivity.this.startActivity(intent);
                    }
                    catch (ActivityNotFoundException e)
                    {
                        Dialogs.this.showAlert("ERROR", "Google Play Market not found!");
                    }
                }
            });
    downloadDialog.setNegativeButton("no",
            new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int i) 
                {
                    dialog.dismiss();
                }
            });
    downloadDialog.show();
}

13voto

Joao Punkte 178

Ab API 30 (Android 11) können Sie nullpointerexception mit launchIntentForPackage erhalten

val launchIntent: Intent? = activity.packageManager.getLaunchIntentForPackage("com.google.android.gm")
startActivity(launchIntent) 

Um dies zu vermeiden, müssen Sie das benötigte Paket in das Manifest aufnehmen

<queries>
    <package android:name="com.google.android.gm" />
</queries>

Hier ist die Dokumentation https://developer.Android.com/training/package-visibility

Und der Artikel im Medium https://medium.com/androiddevelopers/package-visibility-in-Android-11-cc857f221cd9

1 Stimmen

Ja, genau, danke.

9voto

Karima Engineer Punkte 81

Prüfen Sie die App, um Abstürze zu vermeiden. Wenn die App auf dem Telefon vorhanden ist, wird sie gestartet, andernfalls wird sie in Google Play gesucht. Wenn keine Google Play-App auf dem Telefon installiert ist, wird über den Browser im Google Play Store gesucht:

public void onLunchAnotherApp() {
    final String appPackageName = getApplicationContext().getPackageName();

    Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName);
    if (intent != null) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    } else {
        onGoToAnotherInAppStore(intent, appPackageName);
    }
}

public void onGoToAnotherInAppStore(Intent intent, String appPackageName) {
    try {
        intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("market://details?id=" + appPackageName));
        startActivity(intent);
    } catch (android.content.ActivityNotFoundException anfe) {
        intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
        startActivity(intent);
    }
}

0 Stimmen

Gibt es eine Zeichenbegrenzung für die Methode uri.parse?

8voto

Vignesh KM Punkte 1698

Wenn Sie eine bestimmte Aktivität einer anderen Anwendung öffnen möchten, können wir dies verwenden.

Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try 
{
    startActivity(intent)
}catch(ActivityNotFoundException e){
    Toast.makeText(context,"Activity Not Found",Toast.LENGTH_SHORT).show()
}

Wenn Sie eine andere Anwendung benötigen, können Sie anstelle von Toast einen Dialog anzeigen lassen. Mit dem Dialog können Sie den Benutzer zum Play-Store bringen, um die gewünschte Anwendung herunterzuladen.

0 Stimmen

com.android.settings.fuelgauge.PowerUsageSummary ist nur eine Aktivitätsalias de com.android.settings.Settings$PowerUsageSummaryActivity und es war in Android Pie entfernt Deshalb habe ich die Antwort so geändert, dass sie zu Pie passt. Beachten Sie, dass sie auch mit älteren Versionen kompatibel ist, siehe AOSP-Commit vom 10. November 2011 af9252849fd94c1f2859c56a4010900ea38a607e usw.

6voto

Phani Rithvij Punkte 3119

Es ist möglich, die Aktivität einer App zu starten, indem man Intent.setClassName laut den Unterlagen.

Ein Beispiel:

val activityName = "com.google.android.apps.muzei.MuzeiActivity" // target activity name
val packageName = "net.nurik.roman.muzei" // target package's name
val intent = Intent().setClassName(packageName, activityName)
startActivity(intent)

Um sie außerhalb der aktuellen Anwendung zu öffnen, fügen Sie dieses Flag hinzu, bevor Sie den Intent starten.

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

Eine verwandte Antwort aquí

0 Stimmen

Pls wie man in C++ schreibt.

1 Stimmen

@GeneCode stackoverflow.com/a/22436147/8608146 könnte helfen, ich habe noch nie mit C++-Bibliotheken in Android gearbeitet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X