comment démarrer une activité dans un autre module explicitement


Alireza A. Ahmadi

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.

Moti Bartov

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();
    }

Articles connexes


Comment définirText sur un TextView dans une autre activité

Regardez Donc, ce que j'essaie de faire, c'est que lorsque vous cochez cette case à cocherA, du texte apparaîtra dans un TextView différent dans une activité différente que l'utilisateur atteindra plus tard. L'application est un peu comme une application de qu

Comment appeler une activité depuis un autre module

xLogger Je souhaite appeler une activité (ChatActivity) à partir du module Chat dans MessageActivity qui fait partie d'un autre module (vendeur). Mais quand j'ajoute une dépendance sur le module vendeur comme ceci: implementation project(path: ':chat') J'ai r

Comment démarrer l'activité à partir d'un autre projet

S. Koshelnyk Je travaille sur une application météo pour Android et Windows Phone. J'écris donc du code commun dans un autre projet dans "Weather.Api (Portable)" dans "Parsing Class". "Weather.Droid" est utilisé pour Android. Le code de ParsingClass est le sui