繁体   English   中英

ActivityNotFoundException?

[英]ActivityNotFoundException?

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

我也遇到过这个问题,正如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>

确保在aplication中的manifest.xml中声明您的活动:

<application>
    <activity android:name=".YourNewActivity"/>
</application>

要开始新的活动:

Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);

主要代表当前活动,

将活动类从一个包移动到另一个包后,我收到此错误。 清洁构建解决了它(项目 - >清洁)。

添加一个。 (点)在Android Manifest中的活动名称之前。 所以它应该是android:name =“。WordsToSpeakMainActivity”

android框架中有两种类型的意图 ,你正在使用的1-Implicit意图

<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);

为了安全起见,您还可以调用以下新活动:

Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); // 

但是,您必须将活动添加到androidmanifest - 并写一个。 在它面前,例如

<activity android:name=".YOURACTIVITYNAME"></activity>

我对@Tom Pace的答案有一些补充。 答案是完全正确的,但要更清楚:

因缺少而发生ActivityNotFoundException

<category android:name="android.intent.category.DEFAULT" />

因为当Android OS在清单文件中看到这一点时,了解此活动可以接收意图。

抛出的ActivityNotFoundException点是,当activity(intent-creator-activity)尝试为其他活动创建意图(intent-receiver-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开发者:意图过滤器

要通过字符串定义启动活动,请使用:

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);

在AndroidManifest.xml的最顶部,您将看到package属性

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.example"

然后,在activity标签中,您将看到name属性:

<activity
            android:name=".Something"

确保包名称和活动名称在连接在一起时,可以生成活动的完整包规范,即

com.android.example + .Something = com.android.example.Something

否则,您将获得ActivityNotFoundException

我找到了解决这个问题的方法......我在android工作室项目中使用了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周里我们一直在苦苦挣扎

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM