2016-07-27 3 views
0
habe

Das ist sehr seltsam - ich versuche programmgesteuert eine andere App zu öffnen. Ich fand diesen Link, dem ich folgte: Stackoverflow linkDebuggen in Android Studio, Intent läuft nur, wenn ich einen Haltepunkt nach

So ist mein Code wie folgt - beachten Sie, es wird in einem Dialogfeld ausgeführt.

Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 
intentToResolve.addCategory(Intent.CATEGORY_HOME); 
intentToResolve.setPackage("com.android.launcher3"); 
intentToResolve.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
ResolveInfo ri = getPackageManager().resolveActivity(intentToResolve, 0); 
if (ri != null) 
{ 
    Intent intent = new Intent(intentToResolve); 
    intent.setClassName(ri.activityInfo.applicationInfo.packageName, ri.activityInfo.name); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(intent); 
} 

Dies scheint nur zu meinem app und gehen Sie auf den Home-Bildschirm „schließen“, wenn ich einen Haltepunkt im Code zu setzen. Wenn ich es einfach ohne Haltepunkt laufen lasse, passiert nichts.

Ich habe keine Ahnung, warum es das tun würde? Irgendwelche Ideen? Danke.

Edit: Ich habe ein Video von YouTube hochgeladen, damit Sie genau sehen können, was ich meine. Sie werden sehen, wenn ich es das erste Mal ausführen, es trifft den Haltepunkt und das Gerät wechselt zum Startbildschirm. Beim zweiten Mal habe ich den Breakpoint entfernt und nichts passiert. YouTube link

+0

meinst du "nah" als "force close" ?? Stürzt deine App ab? – SripadRaj

+0

Nein, ich meine, nahe dran bringen Sie die andere App (die zufällig der Werfer ist) nach vorne. Also im Grunde geht meine App in den Hintergrund und der Desktop wird angezeigt. – Mudders

Antwort

1

Die Tatsache, dass es funktioniert, wenn Sie einen Haltepunkt setzen, würde darauf hindeuten, dass es eine Art von Timing-Problem ist.

Sie erwähnen, dass Sie diesen Code in einem Dialogfeld ausführen, was für mich die Idee, dass Sie ein Timing-Problem haben, verstärkt.

Versuchen Sie, diesen Code aus der Aktivität auszuführen, nachdem das Dialogfeld geschlossen wurde. Ich wäre sehr überrascht, wenn das Problem nicht behoben wird.

Ich nehme an, dass Sie den Dialog verwenden, um den Benutzer auszuwählen, was gestartet werden soll. Anstatt also zu versuchen, die andere App über das Dialogfeld zu starten, teilen Sie diese Informationen der übergeordneten Aktivität mit und lassen Sie die Aktivität diesen Code ausführen, nachdem das Dialogfeld geschlossen wurde.

Wenn Sie den Dialog anzeigen, tun Sie dies aus einer Aktivität - der Dialog wird über Ihrer Aktivität angezeigt.

Sie verwenden wahrscheinlich einen Dialog-Generator, um das Dialogfeld zu erstellen, und rufen dann builder.create() auf, um das Dialogfeld anzuzeigen.

im Builder-Code, Sie tun etwas, wahrscheinlich wie:

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // User clicked OK 
       } 
      }) 

Im onClick-Handler, der zweite Parameter ist die ID des Elements, das geklickt wurde. Verwenden Sie diese Informationen, um zu entscheiden, was Sie starten möchten. Ich würde in der Aktivität eine separate Methode vorschlagen, um den Start zu starten, und dann diese aus dem onClick-Handler aufrufen.

+0

Hallo GreyBeardGeek - Ich denke du hast Recht.Wie würde ich einen Anruf an die Hauptaktivität senden, um den Code zum Starten einer anderen App auszuführen? Etwas von einem Noob - Entschuldigung. – Mudders

+0

Ich habe einige Informationen zu meiner Antwort hinzugefügt. – GreyBeardedGeek

0

Die erste Sache ist, stellen Sie sicher, haben Sie die App, die Paketname gehört. Code sieht gut aus, das Problem ist der Paketname und die Klasse geben Sie innerhalb setClassName()

+0

Ich habe den folgenden Code verwendet, um den Paketnamen zu erhalten: PackageManager pm; pm = getPackageManager(); Liste packages = pm.getInstalledApplications (0); – Mudders

Verwandte Themen