87 votes

Obtenir le nom d'une activité de façon dynamique - Android

J'aimerais obtenir le nom de l'entreprise actuelle. Activity à envoyer dans l'URI d'une HttpRequest . Existe-t-il un moyen de faire cela sans se référer spécifiquement à la Activity ?

Je sais que je peux le faire myActivity.class.toString() mais c'est juste une façon moins efficace de coder en dur "monActivité" puisque je fais une référence statique à ma Activity . Existe-t-il un moyen plus général de faire cela en utilisant quelque chose comme 'this' (qui, en fait, ne fonctionne pas ici car il renvoie plus d'informations que ce qui est souhaité).

206voto

kcoppock Points 57219

Utilice this.getClass().getSimpleName() pour obtenir le nom de l'activité.

D'après les commentaires, si vous êtes dans le contexte d'une OnClickListener (ou autre classe interne), spécifiez la classe manuellement :

MainActivity.class.getSimpleName()

23voto

darrenp Points 872

Pour les puristes qui ne souhaitent pas utiliser la réflexion, une autre solution consiste à utiliser la fonction PackageManager comme suit :

PackageManager packageManager = activity.getPackageManager();
try {
  ActivityInfo info = packageManager.getActivityInfo(activity.getComponentName(), 0);
  Log.e("app", "Activity name:" + info.name);
} catch (NameNotFoundException e) {
  e.printStackTrace();
}

Cependant, cela semble être beaucoup de travail juste pour faire la même chose que getClass().getName() (et même pas getSimpleName() ). Mais je suppose que cela peut être utile pour quelqu'un qui veut plus d'informations sur l'activité que le simple nom de la classe.

5voto

RJ CR Points 61
ActivityManager am = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
this.currentActivity = taskInfo.get(0).topActivity.getClassName();
Log.i( "CURRENT Activity ",  currentActivity);

3voto

Mahmoud Ayman Points 372

D'abord : ouvrez votre manifest.xml fichier

vous trouverez le nom de votre paquet, à savoir "com.company.projectname"

Ensuite : disons que le nom de votre activité est MainActivity

MainActivity.class.getCanonicalName() >output> "com.company.projectname.MainActivity"

OU

MainActivity.class.getSimpleName() >output> "MainActivity"

OU

MainActivity.class.getName() >output> "com.company.projectname.MainActivity"

1voto

Pierre Points 659

Pour Xamarin

string GetActivityClassName(Activity activity) //Receiving LoginActivity
{
    //ComponentName
    activity.ComponentName; //Output: "md5101a0260d0a0e5d40a0a9009be09b0c2.LoginActivity"

    //LocalClassName
    activity.LocalClassName; //Output: "md5101a0260d0a0e5d40a0a9009be09b0c2.LoginActivity"

    //Java.Lang.Class.FromType.SimpleName
    Java.Lang.Class.FromType(activity.GetType()).SimpleName; //Output "LoginActivity"

    //Type.Name
    activity.GetType().Name; //Output "LoginActivity"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X