无法在Android库模块中启动Activity

16

在我的Android应用项目中,我添加了一个模块,其中包含一个名为 "SampleDataMenuActivity" 的活动。这个活动没有什么特别之处 - 它是使用 Android Studio 中的 "New Module" -> "Android Library" 对话框添加的,并包括由 Android Studio 生成的 "Hello World" 代码。

该应用程序的 AndroidManifest.xml 包括(来自该模块):

<activity
    android:name="com.sample.sampledata.SampleDataMenuActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SampleDataMenuActivity" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

在应用程序的 build.gradle 文件中:

dependencies {
    (...)
    compile project(':sampledata')
}
在项目的settings.gradle文件中:
include ':sampledata', ':app'

在我的应用程序的主活动中,我想使用以下方式导航到模块中的一个活动:

startActivity(new Intent("com.sample.sampledata.SampleDataMenuActivity"));

项目能够成功构建,但当我点击应该带我到这个模块中的活动的按钮时,它失败了,并报告:

android.content.ActivityNoFoundException: No Activity found to handle Intent ( act=com.sample.sampledata.SampleDataMenuActivity )

我错过了什么?

1个回答

8
我发现了错误,也许我应该删除这个问题。但是由于它已经被点赞,其他人可能对这个答案感兴趣:
清单应该声明为:
<activity
    android:name="com.sample.sampledata.SampleDataMenuActivity" >
    <intent-filter>
        <action android:name="com.sample.sampledata.SampleDataMenuActivity" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

1
为什么在<intent-filter>中有<action android:name="com.sample.sampledata.SampleDataMenuActivity" />?只是好奇。我也想做同样的事情。 - hadez30
1
可能有更合适的人来回答这个问题,但我会尝试一下:当使用 startActivity(new Intent("<action_name>") 启动一个活动时,应用程序会查找与操作名称匹配的意图,然后启动相应的活动。对于启动一个活动,你可以给它任何你想要的名称,但据我所知,使用活动类的完整路径被认为是良好的实践,可以使你的代码更易读和可维护。 - user3386180
4
以上答案和问题中的代码看起来很相似。那么它们有什么区别呢? - Kamalakannan J
类别 android.intent.category.DEFAULT 通常用于启动活动的意图。问题中给出的活动名称毫无意义,只是一个打字错误或复制/粘贴问题。 - user3386180

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接