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);
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.
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!
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>
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>
Faites-le de cette façon:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.WAPP", "com.WAPP.SetLocation.setLocationActivity"));
startActivity(i);
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
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);