2015-10-30 12 views
6

Ich habe eine aar erstellt und ich habe es meinem Projekt als Modul hinzugefügt. In diesem Modul habe ich eine HelloWorldActivity, die ich ausführen möchte.So starten Sie eine Aktivität in einem anderen Modul explizit

mein Modul Manifest sieht so aus.

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="ir.sibvas.testlibary1.HelloWorldActivity" 
     android:label="@string/app_name" > 

     <intent-filter> 
      <action android:name="ir.sibvas.testlibary1.HelloWorldActivity" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 


    </activity> 
</application> 

Jetzt kann ich diese Tätigkeit von meinem Projekt starten mit diesem Code

Intent intent = new Intent("ir.sibvas.testlibary1.HelloWorldActivity"); 
startActivity(intent); 

aber wie Sie diesen Code sehen können, ist implizit und Problem mit impliziter Berufung ist, dass, wenn ich Sich mit diesem Modul in mehr als Eine App, die beide auf dem Benutzergerät installiert sind, zeigt dem Benutzer einen App-Auswahldialog. Also wie kann dieser Aufruf explizit gemacht werden, verhindert Benutzer die App wechseln?

dieser Code wird nicht ausgeführt, da HelloWorldActivity als Aufruf Aktivität

Intent intent = new Intent(this, HelloWorldActivity.class); 
startActivity(intent); 

nicht im selben Paket ist möchte ich wirklich nicht mein Modul für jedes Projekt ändern, die es verwendet.

+0

Content Provider könnte Ihnen helfen. –

+0

Intent intent = neue Absicht (MainActivity.this, HelloWorldActivity.class); // stattdessen MainActivity.this verwenden –

Antwort

-2

Die explizite Zuordnung:

Intent intent = new Intent(this, HelloWorldActivity.class); 
startActivity(intent); 

sollte in Ordnung Sie den Import für HelloWorldActivity.class mit dem vollständigen Paketnamen Ihres Moduls nämlich hinzugefügt vorgesehen arbeiten. ir.sibvas.testlibary1.HelloWorldActivity

6

Sie können die Class.forName() verwenden, es funktionierte für mich, wenn ich benötigt wurde, um Aktivität zu starten, die in einem anderen Modul in meinem Projekt ist.

Intent intent = null; 
    try { 
     intent = new Intent(this, 
      Class.forName("ir.sibvas.testlibary1.HelloWorldActivity")); 
     startActivity(intent); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

Saved my day ... –

Verwandte Themen