【问题标题】:android.content.ActivityNotFoundException: Unable to find explicit activity classandroid.content.ActivityNotFoundException:找不到明确的活动类
【发布时间】:2012-06-06 05:18:56
【问题描述】:

我收到此错误:

06-06 10:45:19.685: E/AndroidRuntime(554): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.Android.myApp/com.Android.myApp.Facebook.Example}; have you declared this activity in your AndroidManifest.xml?

但是我已经在我的清单文件中声明了它。这种异常的其他原因可能是什么?

我的清单.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.Android.myApp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="4" />

    <uses-feature android:name="android.hardware.camera" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Light" >

        <activity
            android:name=".SignUpActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SignInActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".HomeActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".selectCityActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".FeedListViewActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".SearchActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".IWantActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".DateActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ShareActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ShareProductActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".SharePriceActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ShareStoreActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ProfileActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ShowMapActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".ParticularEntryActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".MyLocationActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".MapMarkerActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".BarcodeActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".BarcodeResult"
            android:label="@string/app_name" />
        <activity
            android:name=".FeedbackActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".SplashActivity"
            android:label="@string/app_name" />
        <activity
            android:name=".Example"
            android:label="@string/app_name" />

        <uses-library android:name="com.google.android.maps" />
    </application>

</manifest>

【问题讨论】:

  • 可能没有正确引用库类
  • 如何确保它被正确引用??...它在属性 --> 库中。
  • 显示您的清单文件。
  • @Lalit Poptani...这是我在 manifest.xml 中包含的内容...
  • @Archie.bpgc 完成 Manifest 文件,不理解一行。

标签: android classnotfoundexception


【解决方案1】:

您在清单中声明包名称为com.Android.myApp 和活动名称.Example。所以android 将从com.Android.myApp.Example 中搜索它。 但是您的活动位于“com.Android.myApp/com.Android.myApp.Facebook.Example”中。因此将活动名称指定为.Facebook.Example 或完整路径,如下所示 在清单中

<activity
                android:name="com.Android.myApp.Facebook.Example">

</activity>

【讨论】:

  • 标签 属性名称包含无效字符'/'。
  • 关键是要记住包含点“。”在前面,当声明没有完整包名的活动时。很容易忘记这个点,Android Studio 有时会建议(自动完成)不带点!当点丢失时,您会意外收到此错误。
【解决方案2】:

你也可以使用

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

【讨论】:

    【解决方案3】:

    我得到了这个问题的变体。我正在启动一个名为 "Settings" 的活动,但遇到了同样的错误并对清单进行所有建议的更改并没有解决问题。

    问题是,在调用活动中,我也在使用/导入 android.provider.Settings,所以从我在尝试启动活动时可以看到的情况来看,两者之间存在混淆。因此,我在代码而不是清单中更改了它以包含完整路径:

    Intent launchScr = new Intent(this, com.foo.bar.Settings.class);
    

    它奏效了。当然,解决此特定问题的另一种更好的方法是为我的活动使用更好的名称。

    遇到此问题的任何人。

    【讨论】:

    • 就我而言,我写错了Activity的拼写
    • 我有一个 PreferencesActivity 并且似乎有一个同名的 Android 类有一个 include 语句。类似的原因。
    【解决方案4】:

    有时是由于不同包中存在相同的类名(Intent的第二个参数)。

    我还发现当您调用 startService 而不是调用 startActivity 时会发生这种情况,反之亦然。

    【讨论】:

      【解决方案5】:

      从您的例外来看,哪一个是您的班级 - FacebookExample 因为,您在清单中的包中声明为 com.Android.myApp 但是,对于 facebook 活动,您声明了 com.android.myApp.Facebook.Example 并且,

      如果示例是您的活动方式,您应该将您的活动声明为com.Android.myApp.Facebook.Example,因为它来自不同的包或您的活动名称为Facebook.Example,因此您可以更好地声明您的活动,如下所示 -

      <activity
              android:name="com.Android.myApp.Facebook.Example"
              android:label="@string/app_name" />
      

      【讨论】:

        【解决方案6】:

        当缓存清单不同步时,大型项目可能会发生这种情况。我可以在 Android Studio 终端中使用 ./gradlew clean 修复它,然后在 Android Studio 菜单栏中选择 File > Invalidate Caches / Restart 进行良好测量

        【讨论】:

          【解决方案7】:

          只要确保你的 Activity 用这个属性装饰:

          [Activity(Label = "Your App Name", MainLauncher=true)]
          

          注意:仅在需要时设置 MainLauncher。

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

              如果您希望从字符串动态更改您的类,则需要使用此代码: Intent intent = new Intent().setClassName(this.getPackageName(), "com.some.other.name"); 或者你可以把结果从数组或任何其他而不是“com.some.other.name”。干杯!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多