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.this
replace它们,问题就没有了。
我有一个更聪明的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")