【问题标题】:Android: Launching Library Activity from Main AppAndroid:从主应用程序启动库活动
【发布时间】:2016-12-09 15:56:56
【问题描述】:

我已经阅读了“类似问题”,但我仍然无法从主项目启动图书馆项目活动。

我有项目 A(主要) 我有项目 B(库)

Activity 在库清单中声明(甚至在主清单中)

但是当我运行代码时,日志会抛出询问是否在 manifest.xml 文件中声明了活动的错误。

主项目正确地包括库,一切都编译但错误是,我把我正在尝试的意图从主项目:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.package.activities", "MyActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage(context.getPackageName()); // tried without this
context.startActivity(intent);

这是我的清单(来自图书馆项目):

<activity
        android:name="com.package.activities.MyActivity"
        android:exported="true"
        android:label="@string/title_activity"
        android:screenOrientation="landscape"
        android:configChanges="keyboardHidden|orientation"/>

日志:

android.content.ActivityNotFoundException:找不到明确的活动类 {com.package.activities/MyActivity};您是否在 AndroidManifest.xml 中声明了此活动?

【问题讨论】:

  • 尝试intent.setComponent(new ComponentName("com.package.activities", "com.package.activities.MyActivity"));
  • 我会尝试并发表评论
  • 这个结果一样
  • HI Ninja,你解决了这个问题吗..我也面临同样的情况..

标签: java android android-intent android-activity android-library


【解决方案1】:

当您尝试将 Activity 作为单独的组件启动时,Android 会开始在您的主项目代码中查找此库 Activity。由于活动属于库而不是主项目,因此您将获得ActivityNotFoundException

鉴于您已将库项目作为 AAR 文件添加到主项目中,您可以简单地从主项目启动库活动,如下所示:

Intent intent=new Intent(this, "your.library.package.activityname.class")
startActivity(intent)

您必须在主项目的清单文件中声明库活动。一行就够了

<application ...>
    <activity android:name="your.library.package.activityname" />
</application>

【讨论】:

    【解决方案2】:

    试试这个:

    Intent intent = new Intent(context, MyActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    

    【讨论】:

    • 这是不允许的,当我使用此代码时,当我使用 Android Studio 的快速修复(Alt+Enter)选项时,编译失败“无法解析符号 MyActivity”:“添加依赖项... ”(我单击了该选项,但没有任何反应)和“将 MyActivity 从模块(库)移动到(主)”,但这不是所希望的。我们需要将 Activity 保存在库中。
    • 听起来您的库项目没有正确包含在主项目中。你能粘贴一份你的 app/build.gradle 文件的副本吗?
    • 你是对的,该项目没有被正确包含,因为它试图在一个带有 gradle-stable 的主项目中使用 gradle-experimental 构建。看起来两者不兼容。并且 Gradle(stable) 无法将模块附加到 Gradle (experimental)。
    • 这种情况有解决办法吗?
    • 抱歉,我不知道,我从未尝试过这样做。如果你真的需要混合它们,你可能想专门发布一个新问题。祝你好运!
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2012-06-22
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多