21

我在尝试从另一个活动中调用活动时遇到此异常。完整的例外是

android.content.ActivityNotFoundException:无法找到显式活动类 {com.xy/com.xyclass};

我正在做一个intent.setClass("com.x.y","com.x.y.className")whereclassName是我的活动类的名称,并且com.x.y是它所在的包。

我的 AndroidManifest.xml 有以下内容:

<activity android:name="com.x.y.className" android:label="@string/app_name">

我错过了什么吗?

4

24 回答 24

34

也许您需要检查是否将新活动添加到 manifest.xml 文件中

例子:

<activity
      android:name=".className" 
      android:label="@string/app_name" > 
</activity>
于 2010-08-08T09:45:14.310 回答
16

如果其他人遇到类似的事情并到达此帖子,我遇到的问题可能会为您节省一些时间。可能与 OP 的问题无关,但与 ActivityNotFound 异常有关。

我试图通过使用加载一个活动:

Intent intent = new Intent( this, class );

ActivityNotFoundException然而,即使我已经多次检查并重新检查代码,我仍然不断得到。

我得到的这个异常实际上并不是由意图引起的,而是我在加载的活动中运行的一些代码抛出了RuntimeException. (我的问题是由 引起的Typeface.createFromAsset()

您可能会在活动中遇到类似的 RuntimeException。

要查看是否是这种情况,请将您的意图代码放入 try catch 块中。像这样:

try {
    /* your code */
    ...
} catch ( ActivityNotFoundException e) {
    e.printStackTrace();
}

再次运行您的应用程序,并检查您的 LogCat,如果它是相同的问题,您将获得一个带有“Caused By:”条目的 RuntimeException,指向您的实际问题。

我花了一个小时试图弄清楚这一点。希望这可以节省一些时间。

于 2011-06-09T09:06:17.680 回答
14

您正在调用的活动不仅应该出现在它自己的包的清单中,还应该出现在 CALLING 包的清单中。

于 2011-05-27T11:54:23.790 回答
8

从清单中删除您的活动,然后再次添加。此类型不直接写入 XML 类型。相反,请转到Application > Application nodes > add,选择活动,然后浏览文件源。

这对我有用。

于 2012-09-01T19:01:08.410 回答
3

intent.setClass 将参数作为“包上下文”和“类”。一个例子是:

intent.setClass(CurrentActivity.this, TargetActivity.class);

您还需要检查活动是否已在清单文件中注册。

于 2010-08-08T09:32:01.317 回答
2

添加了一个新活动并在 manifest.xml 中定义它,但我仍然收到“无法找到显式活动类”错误。我正在使用 Eclipse。我的问题的解决方案是“清理”项目。从 Eclipse 的主菜单:Project|Clean...。然后选择您的项目并清理它。

于 2011-11-15T08:28:44.510 回答
1

I was using getActivityContext() (instead of Activity.this) for the menu code to save some work, and copy-and-paste it to each activity without editing each time.

I replaced them with Activity.this, and the issue is gone.

I have a feeling a smarter Android guy could work-around not having to do that. Would like to hear what it would be.

于 2012-09-12T00:19:33.823 回答
1

当我在另一个类(作为内部类)中实现 Activity 时,我遇到了 ActivityNotFoundException:

//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}
//...

在清单中声明如下:

<activity android:name=".Pref.Activity"
...

在将其声明为普通类(公共类 PrefActicity)并相应地更改清单后,它照常工作。

于 2012-01-12T06:01:28.237 回答
1

嘿,你需要使用另一种形式的 Intent 构造函数。这肯定会在一秒钟内解决您的问题:

例子:

Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");

startActivity(inte);

这工作得很好,我检查了这段代码,它工作正常。

于 2011-12-05T07:52:07.327 回答
0

除了米娜的回答。当您将活动声明为内部静态类时,您应该将活动写入清单,如...

         <activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />

这里 .app 来自你的包名,可以是 .helpers.afdfa$afda

于 2012-03-01T07:49:04.030 回答
0

查看项目 bin 文件夹中 Android Manifest File 的内容。当您的应用程序被编译和打包时,清单文件将被复制到 bin 文件夹中。就我而言,bin 文件夹中的 Manifest 与原始 Manifest 不一致。这可能是 Eclipse 的错误。我手动将 Manifest 复制到 bin 文件夹,它工作。

于 2014-04-08T12:54:04.173 回答
0

重新启动 Eclipse 并再次检查您的清单文件。如果您发现缺少相应的活动,请添加并重试。它解决了我的类似问题。

于 2012-01-31T13:50:36.120 回答
0

我也遇到了同样的情况。在阅读了pearson的回答后,我修改了我的Activity,发现我写的是

public void onCreate(Bundle s)

但实际上应该是

protected void onCreate(Bundle s)

它现在有效!

于 2015-01-07T04:56:15.653 回答
0

是的,我也遇到了这个问题。我刷新了项目。然后,一切正常。

于 2013-03-08T17:24:37.320 回答
0

我对此错误的解决方案是在清单中的名称前面添加一个包名称。

我有以下活动:

  • id.scanner.main.A1

  • id.scanner.main.gallery.A2

我的清单包含以下内容:

<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>

这解决了问题:

<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>
于 2012-03-23T20:17:04.893 回答
0

manifiest.xml您可以在文件中添加此代码

action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"
于 2014-06-27T05:40:42.283 回答
0

当我有同样的问题时。如果您正在使用库类文件并将其写入 android 清单文件,请像这样写然后删除库项目清单文件这部分>>那么它绝对可以工作..

于 2013-04-26T06:31:25.067 回答
0

如果您在应用程序中包含库并且库正在调用库项目中定义的活动,也会发生此异常。在这种情况下,我们需要将库的清单与调用应用程序的清单合并。

使用 ADT 版本 20,我们可以通过在调用 app 的 project.properties 中添加以下语句来做到这一点。

manifestmerger.enabled=true

于 2014-01-21T11:40:26.177 回答
0

在这里查看文档,您想要的是:

intent.setClassName("com.x.y", "className");
于 2010-08-08T09:42:04.347 回答
0

尝试使用以下内容:

intent.setClassName("com.x.y", "com.x.y.className");

这对我有用

于 2012-02-16T23:37:40.163 回答
0

如果您有一个 Activity 对象(您需要启动它),则此方法有效:

intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
于 2015-05-13T05:08:16.497 回答
0

您调用的活动不包含“sheme”并且包含意图过滤器:

<activity android:name=".SecondActivity">
        <intent-filter>
               <action android:name="com.example.sj.myapplication.SecondActivity"/>
               <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>

所以在调用代码时:

Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
于 2017-01-30T11:12:36.490 回答
0

我还通过将错误的视图传递给 setContentView() 遇到了 ActivityNotFoundException,每个活动的类文件必须以这种方式与布局 xml 文件相对应。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wrongView);
}

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.correctView);
}
于 2019-11-20T02:56:11.827 回答
-1

我遇到过同样的问题。我尝试了所有方法,但后来我整理出来的错误是双引号和我的类名之间有一个空格。它一定要是: intent.setClassName("com.x.y","com.x.y.className")

不是

intent.setClassName("com.x.y","  com.x.y.className")
于 2011-11-19T11:59:53.157 回答