webentwicklung-frage-antwort-db.com.de

Android explizite Absicht mit Zielkomponente

Ist es möglich, explizite Absichten auszulösen, aber nicht für eine Aktivität aus meinem Projekt, sondern für eine Aktivität in einer anderen Anwendung?.

Ich bin mir dieses Codes sicher und weiß, dass er ausgeführt wird

Intent i=new Intent(this,MyActivity.class);

Aber ist es möglich, so etwas zu tun

Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);

Ich meine, wie kann ich die Aktivität explizit aus einer anderen Anwendung heraus starten (Aktivität, die in einer anderen apk enthalten ist)? Ist dies überhaupt möglich?

Ich habe versucht, aber es fällt mir forse enge Nachricht ... :(

16
Lukap

Ja es ist möglich. Die Erzeugung von Absichten ist jedoch anders. Versuchen Sie Folgendes:

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivityForResult(intent);
34
SRam

Ja es ist möglich. Aber die Absichtsschöpfung ist etwas anders.

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivity(intent);

Aber dann können Sie einfach keine Aktivität einer zufälligen App aufrufen. Diese bestimmte Aktivität sollte einen Absichtsfilter mit einer MAIN-Aktion haben.

6
Kumar Bibek

Sie können jede Komponente absichtlich starten, indem Sie nur den Namen der Aktion oder der Zielkomponente (pkg, cls) kennen.
Betrachten wir, ich habe zwei Apps entwickelt app1 & app2 pkg name is com.xyz.app1 & app2 pkg name is com.xyz.app2.

app1 mit zwei Aktivitäten App1MainActivity & App1XyzActivity app2 hat nur eine Aktivität App2MainActivity jetzt möchte ich beide Aktivitäten von app1 von app2 starten App2MainActivity
app2 App2MainActivity habe zwei Schaltflächen b1 & b2 bei Klick auf b1 Ich möchte App1MainActivity starten & bei Klick auf b2 Ich möchte App1XyzActivity starten, dann lautet der Code für die Schaltflächen b1 und b2 in App2MainActivity

b1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1MainActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

b2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1XyzActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

jetzt installiere ich beide Apps app1 & app2 und starte die App2.
Wenn ich auf die Schaltfläche b1 klicke, wird App1MainActivity gestartet. Wenn ich jedoch auf die Schaltfläche b2 klicke, tritt eine Ausnahme auf. Der Grund dafür ist, dass wir keine Aktivität einer anderen App nach dem Zufallsprinzip starten können, auch wenn Sie den Paketnamen und ihre Klasse kennen name, aber Sie können eine andere Hauptaktivität der App starten, wenn sie einen Absichtsfilter mit der Aktion MAIN hat und wenn Sie den Paketnamen und den Klassennamen kennen.

3
S.H.KHAN

Ja, es ist möglich, Sie können eine andere Aktivität eines anderen Pakets wie dieses aufrufen.

Siehe Details hier

1
Rasel

Ich würde vorschlagen, den Paket- und Klassennamen mit einem Punkt zu verketten.

dies beschleunigt das Kopieren und Einfügen, z. beim schreiben von jUnit tests.

String packageName = getApplicationContext().getPackageName();
String className = "SomeActivity";

Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);
0
Martin Zeitler
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("np.birthday.com.order", "np.birthday.com.order.MainActivity");// intent.setClassName("Package NAme of another application", "np.birthday.com.order.MainActivity");
startActivity(intent);
0
jeevan thapa