Подтвердить что ты не робот

Как начать работу в другом модуле явно

Я создал aar, и я добавил его в свой проект как модуль. в этом модуле у меня есть HelloWorldActivity, которую я хочу запустить.

мой модуль-манифест выглядит так.

<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>

Теперь я могу начать эту деятельность из моего проекта, используя этот код

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

но, как вы видите, этот код неявный, а проблема с неявным вызовом заключается в том, что если я использую этот модуль более чем в одном приложении, оба установленные на пользовательском устройстве, он отобразит диалог выбора приложения для пользователя. Итак, как сделать этот вызов явным, не позволяя пользователю переключать приложение?

этот код не будет работать, поскольку HelloWorldActivity не находится в том же пакете, что и активность вызова

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

Я действительно не хочу менять свой модуль для каждого проекта, который его использует.

4b9b3361

Ответ 1

Вы можете использовать Class.forName(), он работал у меня, когда мне нужно было начать работу, которая находится в другом модуле моего проекта.

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

Ответ 2

Первый запуск активности модуля, затем запуск второго действия модуля и запись строки кода - это прекрасно.

 Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.your.packagename");
            if (launchIntent != null) {
                startActivity(launchIntent);//null pointer check in case package name was not found
            }

Ответ 3

Явное назначение:

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

должен работать нормально, если вы добавили импорт для HelloWorldActivity.class с полным именем пакета вашего модуля, а именно. ir.sibvas.testlibary1.HelloWorldActivity