comment démarrer une activité dans un autre module explicitement
J'ai créé un aar et je l'ai ajouté à mon projet en tant que module. dans ce module, j'ai une HelloWorldActivity que je veux exécuter.
mon manifeste de module ressemble à ceci.
<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>
Maintenant, je peux démarrer cette activité à partir de mon projet en utilisant ce code
Intent intent = new Intent("ir.sibvas.testlibary1.HelloWorldActivity");
startActivity(intent);
mais comme vous pouvez le voir, ce code est implicite et le problème avec les appels implicites est que si j'utilise ce module dans plus d'une application, tous deux installés sur la machine utilisateur, il affichera une boîte de dialogue de sélection d'application à l'utilisateur. Alors, comment rendre cet appel explicite, empêchant l'utilisateur de changer d'application?
ce code ne fonctionnera pas car HelloWorldActivity n'est pas dans le même package que l'activité d'appel
Intent intent = new Intent(this, HelloWorldActivity.class);
startActivity(intent);
Je ne veux vraiment pas changer mon module pour chaque projet qui l'utilise.
Vous pouvez utiliser le Class.forName()
, cela a fonctionné pour moi lorsque je devais démarrer une activité qui se trouve dans un autre module de mon projet.
Intent intent = null;
try {
intent = new Intent(this,
Class.forName("ir.sibvas.testlibary1.HelloWorldActivity"));
startActivity(intent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}