web-dev-qa-db-fra.com

Erreur Android "Impossible de trouver une classe d'activité explicite"

J'ai un projet Android avec plusieurs packages. Dans ce cas, la structure des packages est com.WAPP.SetLocation est le package contenant l'activité que je souhaite exécuter.

Dans mon manifeste, com.WAPP est considéré comme le package de base:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
      package="com.WAPP"
      Android:versionCode="1"
      Android:versionName="1.0">

Mes activités sont déclarées dans mon manifeste comme:

<activity Android:name=".mainScreenActivity"></activity>
<activity Android:name=".SetLocation.setLocationActivity"></activity>

L'activité de l'écran principal s'affiche correctement, car elle se trouve dans le package com.WAPP. Mais lorsque j'essaie d'exécuter setLocationActivity, je ne parviens pas à trouver d'erreur de classe explicite. Voici comment j'ai les paramètres d'intention:

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.setLocationActivity");
            startActivity(i);
22
Johnny Rocket

Le premier paramètre est package d'application pas le package dans lequel se trouve l'activité.

Vous pouvez invoquer l'activité comme ceci.

Intent i = new Intent();
i.setClassName("com.WAPP",
               "com.WAPP.SetLocation.setLocationActivity");
startActivity(i);

Il est préférable que SYLARRR ait suggéré à Android de le déterminer automatiquement pour vous. D'où l'appel comme ..

startActivity(new Intent(this, setLocationActivity.class));

Selon les normes Java, il est recommandé que le nom du package soit en minuscule et le nom de la classe CamelCased.

25
Jeremy Edwards

Si la nouvelle activité ne fait pas partie du même paquet avec MainActivity (vous appelez à partir d’ici?), Essayez de déclarer sur manifeste

<activity Android:name="com.WAPP.SetLocation.setLocationActivity"></activity>

et dans l'appelant

Intent intent = new Intent(this, setLocationActivity.class);
startActivity(intent);

J'espère que cela t'aides!

12
Huy Hóm Hỉnh

En plus des réponses ci-dessus, assurez-vous que vos activités sont déclarées dans l'application dans le manifeste

<application
    Android:allowBackup="true"
    Android:label="@string/app_name"
    Android:supportsRtl="true">

    <activity Android:name=".mainScreenActivity"></activity>
    <activity Android:name=".SetLocation.setLocationActivity"></activity>

</application>
11
polis

Si je ne me trompe pas, la i.setClassName("com.WAPP.SetLocation","com.WAPP.SetLocation.setLocationActivity"); devrait être i.setClassName(getBaseContext(),"setLocationActivity");Référence

Essayez aussi cette syntaxe:

startActivity(new Intent(MyActivity.this, setLocationActivity.class));

et essayez de supprimer le point de départ de:

<activity Android:name=".SetLocation.setLocationActivity"></activity>
2
Indrek Kõue

Faites-le de cette façon:

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
startActivity(i);
2
Daniel De León

Dans Xamarin Android, assurez-vous que votre classe d'activité a un attribut d'activité.

[Activity(Theme = "@style/MyTheme")]
public class MyActivity : ActivityBase
{
...
}

Avec cela, vous vous assurez que votre activité est enregistrée dans AndroidManifest.xml

0
Amadeus Sánchez

dans votre manifeste, vous l'avez déclaré . SetLoction.setLocationActivity mais le nom du package est com.WAPP.SetLocationso, vous devez le préfixer à nouveau. 

Intent i = new Intent();
            i.setClassName("com.WAPP.SetLocation",
                           "com.WAPP.SetLocation.SetLocation.setLocationActivity");
            startActivity(i);
0
Michal Palczewski