android.content.ActivityNotFoundException:

Posted

技术标签:

【中文标题】android.content.ActivityNotFoundException:【英文标题】:android.content.ActivityNotFoundException: 【发布时间】:2011-03-26 21:57:56 【问题描述】:

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

无法找到显式活动类 com.x.y/com.x.y.class;

我正在执行intent.setClass("com.x.y","com.x.y.className"),其中className 是我的活动类的名称,com.x.y 是它所在的包。

我的 androidManifest.xml 有以下内容:

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

我错过了什么吗?

【问题讨论】:

【参考方案1】:

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

例子:

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

【讨论】:

我已经有以下条目: 仍然没有运气:( @paypalcomp 看起来您已将完整的包名称添加到活动名称中。尝试删除它,使您的条目看起来像: @Corey 我发现使用主应用程序清单文件中使用的完整包名(指库)对我有用。 @user94154 我也是。出于某种原因,.ActivityClassName 表示法在独立运行中有效,但在通过 Intent 从不同的应用程序调用时无效。 +1 确认我没有产生幻觉。 由于某种原因,我遇到了类似的问题...没有什么真正起作用我试图用完整的包名称更改活动名称。试图以许多不同的方式调用意图。甚至尝试将其放入 try catch 中,如下所述。我不知道发生了什么【参考方案2】:

如果其他人遇到类似的事情并到达此帖子,我遇到的问题可能会为您节省一些时间。可能与 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,指向您的实际问题。

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

【讨论】:

谢谢!注释掉目标活动中的 onCreate 活动使问题消失。显然,人们需要接受建议,用一粒盐仔细检查清单。【参考方案3】:

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

【讨论】:

你的意思是如果我将一个项目作为库项目导入我的工作区,我也应该将库项目中清单中的&lt;activity&gt;元素复制到我的项目清单中吗?跨度> 【参考方案4】:

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

这对我有用。

【讨论】:

奇怪的错误,这为我修复了它:)【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

例子:

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

startActivity(inte);

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

【讨论】:

【参考方案8】:

当我在另一个类(作为内部类)中实现 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);
    

//...

在manifest里面声明如下:

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

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

【讨论】:

【参考方案9】:

我使用getActivityContext()(而不是Activity.this)作为菜单代码以节省一些工作,并将其复制并粘贴到每个活动中,而无需每次都进行编辑。

我将它们替换为Activity.this,问题就消失了。

我有一种感觉,一个更聪明的 Android 人可以解决这个问题,而不必这样做。想听听会是什么。

【讨论】:

【参考方案10】:

查看文档 here 你想要的是:

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

【讨论】:

感谢您的快速回答 :) .. 但我正在使用 Intent 类的以下方法“setClassName(String packageName, String className)”。我的清单文件包含以下条目: 我应该添加任何意图过滤器吗?我正在使用以下代码创建我的意图: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setClassName("com.x.y", className.class.getName()); activity.startActivity(intent); 我相信您需要在清单中的活动标签之间添加 文件。 不.. 仍然没有运气.. 得到这个错误:android.content.ActivityNotFoundException: Unable to find explicit activity class com.x.y/com.x.y.className;您是否在 AndroidManifest.xml 中声明了此活动?在我的清单文件中添加了以下内容: :( 无论如何.. Intent 意图 = new Intent(activity,CartActivity.class);活动.startActivity(意图);它就像一个魅力:) 非常感谢你【参考方案11】:

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

【讨论】:

【参考方案12】:

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

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

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

【讨论】:

【参考方案13】:

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

我有以下活动:

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>

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

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

ma​​nifestmerger.enabled=true

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

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

action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"

【讨论】:

【参考方案19】:

我也遇到了同样的情况。看了pearson的回答,修改了我的Activity,发现我写了

public void onCreate(Bundle s)

但其实应该是的

protected void onCreate(Bundle s)

现在可以使用了!

【讨论】:

【参考方案20】:

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

intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());

【讨论】:

【参考方案21】:

您调用的活动不应包含“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);

【讨论】:

【参考方案22】:

尝试使用以下方法:

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

这对我有用

【讨论】:

【参考方案23】:

我还通过将错误的视图传递给 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);

【讨论】:

【参考方案24】:

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

不是

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

【讨论】:

以上是关于android.content.ActivityNotFoundException:的主要内容,如果未能解决你的问题,请参考以下文章