我在以下代码中收到ActivityNotFoundException
:
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
的Manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
答案 0 :(得分:25)
我也遇到过这个问题,正如jpahn所描述的那样简洁。
前面的时期对我没有任何帮助。即使正是如此(包括编辑在内的原始问题的副本),我仍然会得到ActivityNotFoundException。
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
的Manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
经过多次试错后,只需将其添加到清单中的intent-filter即可解决此问题:
<category android:name="android.intent.category.DEFAULT" />
所以最终的清单文件包含:
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
答案 1 :(得分:9)
请务必在应用程序中的manifest.xml中声明您的活动:
<application>
<activity android:name=".YourNewActivity"/>
</application>
开始新活动:
Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);
main 代表当前活动
答案 2 :(得分:9)
将活动类从一个包移动到另一个包后出现此错误。 干净的构建解决了它(项目 - &gt;清洁)。
答案 3 :(得分:5)
添加一个。 (点)在Android Manifest中的活动名称之前。所以它应该是android:name =“。WordsToSpeakMainActivity”
答案 4 :(得分:4)
android框架中有两种类型的意图, 您正在使用的 1-Implicit Intents ,
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
只需在意图过滤器中添加一行
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
2-明确意图
Intent i=new Intent(CurrentActivity.this,WhereWeWantToGoActivity.class);
startActivity(i);
答案 5 :(得分:3)
为了安全起见,您还可以像这样打电话给您的新活动:
Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); //
但是,您必须将活动添加到androidmanifest - 并写一个。在它面前,例如
<activity android:name=".YOURACTIVITYNAME"></activity>
答案 6 :(得分:2)
我对@Tom Pace的答案有一些补充。答案是完全正确的,但要更清楚:
ActivityNotFoundException
因缺少
<category android:name="android.intent.category.DEFAULT" />
因为当Android OS在清单文件中看到此内容时,请理解此活动可以接收意图。
抛出的点ActivityNotFoundException
是,当活动(intent-creator-activity)尝试为其他活动(意图接收者活动)创建意图时,Android OS会看到接收者活动的意图但接收者活动不接待任何人。然后,Android OS会向intent-creator-activity返回null或空意图。并且startActivity
会抛出异常。
我找到了Android开发人员的代码来避免这种异常:
// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
答案 7 :(得分:1)
要按字符串定义启动活动,请使用:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);
答案 8 :(得分:0)
在AndroidManifest.xml的最顶层,您将看到包属性
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.example"
然后,在活动代码中,您会看到名称属性:
<activity
android:name=".Something"
确保包名称和活动名称在连接在一起时,制作活动的完整包装规范,即
com.android.example
+ .Something
= com.android.example.Something
否则,您将获得ActivityNotFoundException
。
答案 9 :(得分:0)
我找到了解决此问题的方法...我正在android studio项目中使用2个模块,这里的事情是我需要将活动添加到主清单文件
<activity android:name="com.HeadApp.ARTry.UnityPlayerActivity"
android:clearTaskOnLaunch="false" android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
/>
我在统一活动清单中发现了这一点,我只是复制了该活动并将其粘贴到主清单中,就是这样,希望对您有所帮助,在过去的3周中,我为此付出了很多努力