如何在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”,并且您没有名为MainActivity
的Activity
。这些都没有任何意义。请解释您要做什么。
在 Android Studio 中,文件 -> 新建 -> 新模块。因此,我在同一个应用程序中有多个模块。如果要在另一个模块中使用模块的活动,则需要将该模块添加为该模块中的依赖项。只有当它是库模块时才能添加依赖项。在我的示例中,该模块不是库模块。它是一个应用程序模块。那么我将如何引用位于模块(不是库模块)中的 Activity?以上是关于如何在Android的另一个模块中调用一个Activity(属于一个模块)?的主要内容,如果未能解决你的问题,请参考以下文章
Android 如何从 Main Activity 中的另一个类调用 Activity 数据类型?
如何在 MainActivity 之外的另一个类中调用 findViewById(R.id.textView)?