ActivityNotFoundException?

时间:2010-11-08 05:16:33

标签: android android-intent

我在以下代码中收到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>

10 个答案:

答案 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);
}

Android Developers: Intent Filters

答案 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周中,我为此付出了很多努力