android.content.ActivityNotFoundException:无法找到显式活动类

时间:2012-06-06 05:18:56

标签: android classnotfoundexception

我收到此错误:

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?

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

我的manifest.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>

9 个答案:

答案 0 :(得分:36)

您在清单中将包名称声明为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>

答案 1 :(得分:6)

您也可以使用

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

答案 2 :(得分:4)

我对这个问题有所了解。我正在启动一项名为&#34;设置&#34; 的活动,并获得相同的错误并对清单进行所有建议的更改并未解决问题。

事情是,在调用活动中,我还使用/导入android.provider.Settings,所以从我在尝试启动活动时可以看到它在两者之间感到困惑。因此,我在代码而不是清单中更改了此内容以包含完整路径:

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

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

HTH任何人都有这个问题的变种。

答案 3 :(得分:2)

从您的例外中选择哪一个 - FacebookExample因为,您在清单中的包中声明为com.Android.myApp但是,对于facebook活动,您声明了{{1} 1}}和,

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

Facebook.Example

答案 4 :(得分:2)

只需确保您的活动使用此属性修饰:

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

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

当缓存的清单不同步时,这可能会在大型项目中发生。我可以使用./gradlew clean在Android Studio终端中对其进行修复,然后在Android Studio菜单栏中选择文件> 使缓存无效/重新启动以达到良好的效果< / p>

答案 7 :(得分:0)

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

{{1}}

答案 8 :(得分:0)

如果要从字符串动态更改类,则需要使用以下代码: gcloud init 或者您可以将结果来自数组或其他任何形式,而不是“ com.some.other.name”。干杯!