android.content.ActivityNotFoundException:

时间:2010-08-08 09:25:38

标签: android android-activity android-manifest

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

  

android.content.ActivityNotFoundException:无法找到显式活动类{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">

我错过了什么吗?

24 个答案:

答案 0 :(得分:31)

您可能需要检查是否已将新活动添加到manifest.xml文件

示例:

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

答案 1 :(得分:16)

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

我试图使用以下方法加载活动:

Intent intent = new Intent( this, class );

然而,即使我多次检查并重新检查代码,我也不断获得ActivityNotFoundException

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

引起的

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

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

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

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

我花了一个小时试图解决这个问题。希望这可以节省一些时间。

答案 2 :(得分:14)

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

答案 3 :(得分:8)

从清单中删除您的活动,然后重新添加。此类型不直接写入XML类型。而是转到Application > Application nodes > add,选择“活动”,然后浏览文件源。

这对我有用。

答案 4 :(得分:3)

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

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

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

示例:

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

startActivity(inte);

这很有效,我检查了这段代码,它的工作正常。

答案 7 :(得分: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)并相应地更改清单后,它照常工作。

答案 8 :(得分:1)

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

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

我有一种感觉,聪明的Android家伙可以解决这个问题。想听听它会是什么。

答案 9 :(得分:0)

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

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

manifestmerger.enabled = true

答案 10 :(得分: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>

答案 11 :(得分:0)

查看项目bin文件夹中Android Manifest File的内容。编译和打包应用程序时,Manifest文件将复制到bin文件夹。在我的情况下,bin文件夹中的Manifest不同意原始Manifest。这可能是Eclipse的一个错误。我手动将Manifest复制到bin文件夹,然后就可以了。

答案 12 :(得分:0)

您可以在manifiest.xml文件

中添加此代码
action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"

答案 13 :(得分:0)

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

public void onCreate(Bundle s)

但事实上它应该是

protected void onCreate(Bundle s)

它现在有效!

答案 14 :(得分:0)

如果你有一个Activity对象(你需要启动),这是有效的:

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

    axios({
      url:   '/users/avatar',
      method: 'GET',
      headers: {
        'Authorization': "Bearer " + token,
      },
      timeout: 1000,
      data: {avatar: avatarUrl},
      responseType: 'blob',
    })
    ~``

相对于

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

答案 17 :(得分:0)

当我遇到同样的问题时。如果您正在使用库类文件并将其写入android清单文件,请将其写入,然后删除库项目清单文件此部分&gt;&gt;           然后它绝对会起作用..

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

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

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

答案 20 :(得分:0)

尝试使用以下内容:

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

这对我有用

答案 21 :(得分:0)

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

答案 22 :(得分:0)

查看文档 here 您想要的是:

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

答案 23 :(得分:-1)

我有同样的问题。我尝试了一切,但是后来我解决的错误是双引号和我的类名之间留有空格。它一定要是: intent.setClassName("com.x.y","com.x.y.className")

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