Je reçois cette erreur:
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?
Mais je l'ai déclaré dans mon fichier manifeste. Quelles pourraient être les autres raisons d'une telle exception?
Mon manifeste.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>
Vous avez déclaré le nom du package dans le manifeste sous la forme com.Android.myApp
et le nom de l'activité .Example
.So Android le recherchera à partir du com.Android.myApp.Example
. Mais votre activité réside dans "com.Android.myApp/com.Android.myApp.Facebook.Example
". Donnez-lui le nom de l'activité sous la forme .Facebook.Example
ou le chemin complet indiqué ci-dessous. .Dans le manifeste
<activity
Android:name="com.Android.myApp.Facebook.Example">
</activity>
vous pouvez aussi utiliser
<activity
Android:name=".Facebook.Example"
Android:label="@string/app_name" />
J'ai une variation à ce problème. Je lançais une activité appelée "Paramètres" et le fait de recevoir la même erreur et d'apporter toutes les modifications suggérées au manifeste ne résolvaient pas le problème.
Le fait est que, dans l'activité d'appel, j'utilisais/importais également Android.provider.Settings, donc d'après ce que je peux voir en essayant de lancer l'activité, il y avait confusion entre les deux. J'ai donc changé cela dans le code plutôt que dans le manifeste pour inclure le chemin complet:
Intent launchScr = new Intent(this, com.foo.bar.Settings.class);
Et ça a fonctionné. Bien sûr, l’autre, et le meilleur moyen de résoudre ce problème, serait d’utiliser de meilleurs noms pour mes activités.
HTH n'importe qui avec cette variante du problème.
De votre exception, laquelle est votre classe - Facebook
ou Example
Parce que vous avez déclaré dans le paquet dans manifest comme com.Android.myApp
Mais pour l'activité facebook
, vous avez déclaré com.Android.myApp.Facebook.Example
Et,
Si exemple est votre activité, vous devez déclarer votre activité sous le nom com.Android.myApp.Facebook.Example
car elle provient d’un autre package ou votre nom d’activité sous le nom Facebook.Example
Il est donc préférable de déclarer votre activité comme ci-dessous -
<activity
Android:name="com.Android.myApp.Facebook.Example"
Android:label="@string/app_name" />
Assurez-vous simplement que votre activité est décorée avec cet attribut:
[Activity(Label = "Your App Name", MainLauncher=true)]
Remarque: définissez uniquement MainLauncher si nécessaire.
Parfois, cela est dû à l'existence du même nom de classe (deuxième paramètre de l'intention) dans différents packages.
J'ai également constaté que cela se produisait lorsque vous appelez startService au lieu d'appeler startActivity et inversement.
Cela peut se produire sur des projets volumineux lorsque le manifeste mis en cache est désynchronisé. J'ai pu résoudre ce problème dans le terminal Android Studio avec ./gradlew clean
, puis dans la barre de menus d'Android Studio en sélectionnant Fichier > Invalider les caches/Redémarrer pour faire bonne mesure
Cela fonctionne si vous avez un objet d'activité (que vous devez lancer):
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());