无法在 Android 库模块中启动 Activity
Posted
技术标签:
【中文标题】无法在 Android 库模块中启动 Activity【英文标题】:Cannot Launch Activity in Android Library Module 【发布时间】:2015-01-14 14:52:24 【问题描述】:在我的 android 应用项目中,我添加了一个模块,其中包含一个名为“SampleDataMenuActivity”的活动。此活动没有什么特别之处 - 它是使用 Android Studio 中的“新模块”->“Android 库”对话框添加的,并包含 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>
在app的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】:我发现了错误,也许我应该删除这个问题。但由于它被赞成,其他人可能会对这个答案感兴趣:
清单应说明:
<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>
【讨论】:
为什么startActivity(new Intent("<action_name>")
启动活动时,应用会查找与操作名称匹配的意图,然后启动相应的活动。为了启动一个活动,你可以给它起任何你想要的名字,但据我了解,使用活动类的完整路径被认为是一种很好的做法,并使你的代码更具可读性和可维护性..
上述答案和问题中的代码看起来很相似。那有什么区别呢?
Category android.intent.category.DEFAULT
通常用于启动活动的意图。问题中给出的活动名称没有意义。这只是一个错字或复制/粘贴问题。以上是关于无法在 Android 库模块中启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章
无法解析来自库模块的 Kotlin Android 扩展布局
Android-无法在单独的模块中使用 org.greenrobot.eventbus