android.content.ActivityNotFoundException:

当我试图从另一个调用一个活动时,我得到这个exception。 完全的例外是

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

我正在做一个intent.setClass("com.xy","com.xyclassName")其中className是我的活动类的名称和com.xy是它所在的包。

我的AndroidManifest.xml包含以下内容:

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

我错过了什么?

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

例:

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

如果其他人遇到类似的事情并到达这个岗位,我遇到的一个问题可能会节省您一些时间。 可能与OP的问题没有关系,但是与ActivityNotFoundexception有关。

我正试图通过使用以下操作来加载活动:

 Intent intent = new Intent( this, class ); 

但是,即使我多次检查并重新检查代码,我仍然一直不停地得到ActivityNotFoundException

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

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

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

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

再次运行你的应用程序,并检查你的LogCat,如果是相同的问题,你会得到一个RuntimeException与“引起:”条目指向你的实际问题。

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

您所调用的活动不仅会出现在Manifest中,而且还会出现在CALLING包的Manifest中。

从清单中删除您的活动,然后重新添加。 这种types不直接写入XML。 相反,转到Application > Application nodes > add ,select活动,然后浏览文件来源。

这对我有效。

intent.setClass将参数设置为“Package Context”和“Class”。 一个例子是:

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

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

添加了一个新的活动,并在manifest.xml中定义它,但我仍然“无法find明确的活动类”的错误。 我正在使用Eclipse。 我的问题的解决scheme是“清理”项目。 在Eclipse的主菜单中:Project | Clean ….然后select你的项目并清理它。

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

例:

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

这工作完美,我检查了这个代码,它的工作正常。

当我在另一个类(作为一个内部类)中实现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)并相应地更改清单之后,它照常运行。

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

我用Activity.thisreplace它们,问题就没有了。

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

在这里看文档你想要的是:

 intent.setClassName("com.xy", "className"); 

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

尝试使用

intent.setClassName(“com.xy”,“com.xyclassName”);

这对我有用

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

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

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

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

我有以下活动:

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

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

当我有同样的问题。 如果你正在使用库类文件,并将其写入到Android清单文件写它喜欢,然后删除这个部分库项目清单文件>>那么它将工作绝对..

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

使用ADT版本20,我们可以通过在调用app的project.properties中添加以下语句来完成此操作。

manifestmerger.enabled =真

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

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

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

我也得到了同样的情况。 在阅读了佩尔森的回答后,我修改了我的活动,发现我写了

 public void onCreate(Bundle s) 

但实际上应该是这样的

 protected void onCreate(Bundle s) 

它现在起作用了!

如果你有一个Activity对象(你需要启动的话)

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

你所调用的活动不包含“sheme”并包含intent-filter:

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

我遇到过同样的问题。 我尝试了所有的东西,但后来我发现的错误是,在双引号和我的类名之间留有空格。 它必须是: intent.setClassName("com.xy","com.xyclassName")

 intent.setClassName("com.xy"," com.xyclassName")