我收到此错误:
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>
您在清单中将包名称声明为com.Android.myApp
和活动名称.Example
.So android将从com.Android.myApp.Example
中搜索它。但是你的活动存在于“com.Android.myApp/com.Android.myApp.Facebook.Example
”。所以将活动名称命名为.Facebook.Example
或完整路径如下所示在清单中
<activity
android:name="com.Android.myApp.Facebook.Example">
</activity>
你也可以用
<activity
android:name=".Facebook.Example"
android:label="@string/app_name" />
我对这个问题有所了解。我正在启动一个名为“设置”的活动并获得相同的错误并对清单进行所有建议的更改并没有解决问题。
事实上,在调用活动中,我也使用/导入android.provider.Settings,所以从我在尝试启动活动时可以看到它在两者之间感到困惑。因此,我在代码而不是清单中更改了此内容以包含完整路径:
Intent launchScr = new Intent(this, com.foo.bar.Settings.class);
它奏效了。当然,解决这个特定问题的另一种更好的方法是为我的活动使用更好的名称。
HTH任何人都有这个问题的变种。
从你的例外,哪一个是你的类 - Facebook
或Example
因为,你在清单中的包中声明为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" />
只需确保您的Activity使用以下属性进行修饰:
[Activity(Label = "Your App Name", MainLauncher=true)]
注意:如果需要,仅设置MainLauncher。
有时,这是由于在不同的包中存在相同的类名(Intent的第二个参数)。
我发现当你调用startService而不是调用startActivity时会发生这种情况,反之亦然。
当缓存的清单不同步时,这可能发生在大型项目上。我能够使用./gradlew clean
在Android Studio终端中修复它,然后在Android Studio菜单栏中选择File> Invalidate Caches / Restart for good measure
如果您有一个Activity对象(需要启动),则此方法有效:
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());