如何在Android的另一个模块中调用一个Activity(属于一个模块)?

Posted

技术标签:

【中文标题】如何在Android的另一个模块中调用一个Activity(属于一个模块)?【英文标题】:How to invoke an Activity (belonging to a module) in another module in Android? 【发布时间】:2017-04-16 02:56:35 【问题描述】:

这是场景: 我的单个应用程序中有 2 个模块(在 android Studio 中,文件 -> 新建 -> 新模块)。

    模块 A 模块 B

模块 A(它不是库项目。 它的 gradle 以应用插件开头:'com.android.application')。

模块 B(也不是库模块)。

在模块 B 中,我需要调用一个属于模块 A 的 Activity(比如 MainActivity)。

模块 A 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.emergencycontacts">
    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true">
<activity android:name=".EmergencyContactsActivity" android:theme="@style/AppTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

    </application>

</manifest>

模块 B 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.secondaryactivity">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">

        <activity android:name=".BaseAppActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity>
    </application>

</manifest>

如何实现?

请注意,我不能在模块 B 中添加模块 A 的依赖项,因为模块 A 不是库模块。

等待您的宝贵回复。

【问题讨论】:

我不完全了解您的情况?您指的是两种不同的应用程序吗? @MuratK。很抱歉让您感到困惑。我说的是同一个应用程序的 2 个不同模块。编辑了问题。 也许这有助于***.com/questions/26977007/… @MuratK。它没有。您建议的链接处理应用程序和模块之间的通信。我正在处理的是两个模块之间。不涉及应用模块。 这方面有什么更新吗? 【参考方案1】:

要从任何应用程序启动任何Activity,您可以这样做:

Intent intent = new Intent();
intent.setClassName("packageName", "className");
startActivity(intent);

您不需要在编译期间能够引用该Activity 的源代码。

这将解决您所说的问题。

【讨论】:

应用程序在执行上述操作时崩溃。这是 logcat:java.lang.IllegalArgumentException:未知组件:com.abc.mainactivity/com.abc.mainactivity.MainActivity 发布您的清单。请不要将其添加为评论。只需编辑您的原始帖子并添加完整的清单。 已发布。请检查。 对不起,我很困惑。这是 2 个独立的应用程序。我不知道你所说的“模块”是什么意思,但是当你编译一个应用程序时,你最终会得到一个 APK,而这个 APK 有一个包名。在任何情况下,您的任何一个包都不称为“com.abc.mainactivity”,并且您没有名为MainActivityActivity。这些都没有任何意义。请解释您要做什么。 在 Android Studio 中,文件 -> 新建 -> 新模块。因此,我在同一个应用程序中有多个模块。如果要在另一个模块中使用模块的活动,则需要将该模块添加为该模块中的依赖项。只有当它是库模块时才能添加依赖项。在我的示例中,该模块不是库模块。它是一个应用程序模块。那么我将如何引用位于模块(不是库模块)中的 Activity?

以上是关于如何在Android的另一个模块中调用一个Activity(属于一个模块)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从android studio中的另一个模块导入类?

Android 如何从 Main Activity 中的另一个类调用 Activity 数据类型?

猴子在Python的另一个模块中修补一个类

如何在 MainActivity 之外的另一个类中调用 findViewById(R.id.textView)?

将数据模型转换为 Android 中的另一个和 api 调用

如何在库模块Android Studio中调用主应用程序模块功能