【问题标题】:ActivityNotFoundException?ActivityNotFoundException?
【发布时间】:2011-05-06 12:10:03
【问题描述】:

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

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

    经过多次反复试验后,只需将其添加到清单中的意图过滤器即可解决:

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

    【讨论】:

    • 这解决了我的问题。我没有在清单中采取行动,但应用程序仍在本地运行。 bt 当我从 Play 商店上传它时,我得到了 ActivityNotFound exptn。
    • 添加&lt;category&gt; 也为我解决了这个问题。然而,我发现这很令人困惑,因为我所搭载的示例项目并未在其活动定义之一中使用此标签。
    • 这(现在?)记录在 developer.android.com/guide/components/… - startActivity[ForResult] 中自动/秘密地将 category.DEFAULT 添加到隐式 Intent 中,然后无法匹配 &lt;intent-filter&gt; 类别测试,因为过滤器必须包含Intent 中的所有类别(请参阅developer.android.com/guide/components/…
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      请务必在应用程序的 manifest.xml 中声明您的活动:

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

      要启动新的活动:

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

      其中main代表当前活动,

      【讨论】:

        【解决方案4】:

        添加一个 . (点)在您的 Android 清单中的活动名称之前。所以应该是 android:name=".WordsToSpeakMainActivity"

        【讨论】:

        • 这是所有活动的要求还是只是默认的?
        • 是的,这是一个要求。属性值应该是完全限定的类名(例如,“com.myapp.myexample.project.MyActivity”)。但是,作为简写,如果名称的第一个字符是句点(例如,“.MyActivity”),它会附加到 元素中指定的包名称。详情请参阅developer.android.com/guide/topics/manifest/…
        【解决方案5】:

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

        ActivityNotFoundException 出现是因为没有

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

        因为当Android OS在manifest文件中看到这个,就知道这个activity可以接收intent了。

        ActivityNotFoundException 抛出的一点是,当活动(intent-creator-activity)尝试为其他活动(intent-receiver-activity)创建意图时,Android 操作系统会看到接收者活动的意图,但接收者活动没有接待任何人。然后,Android OS 将 null 或空意图返回到 intent-creator-activity。而startActivity 会抛出该异常。

        我从 android 开发者那里找到了避免这个异常的代码:

        // Verify the original intent will resolve to at least one activity
        if (sendIntent.resolveActivity(getPackageManager()) != null) {
            startActivity(chooser);
        }
        

        Android Developers: Intent Filters

        【讨论】:

          【解决方案6】:

          为了安全起见,您也可以这样调用您的新活动:

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

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

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

          【讨论】:

            【解决方案7】:

            android 框架中有两种类型的意图, 1-隐式意图,您正在使用,

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

                <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

                【讨论】:

                  【解决方案10】:

                  我找到了解决这个问题的方法...我在一个 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 周里一直在努力解决这个问题

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-06-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-09
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多