web-dev-qa-db-fra.com

Obtenir le nom de l'activité de manière dynamique - android

J'aimerais avoir le nom du Activity actuel à envoyer dans l'URI d'un HttpRequest. Y a-t-il un moyen de faire cela sans se référer spécifiquement à la Activity?

Je sais que je peux faire myActivity.class.toString() mais c’est un moyen moins efficace de coder en dur "myActivity" puisque je fais une référence statique à mon Activity. Existe-t-il un moyen plus général de faire cela en utilisant quelque chose comme 'ceci' (qui d'ailleurs ne fonctionne pas ici parce qu'il renvoie plus d'informations que ce qui est souhaité).

67
evanmcdonnal

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

A partir des commentaires, si vous êtes dans le contexte d'un OnClickListener (ou d'une autre classe interne), spécifiez la classe manuellement:

MainActivity.class.getSimpleName()

170
kcoppock

Pour les puristes qui ne veulent peut-être pas utiliser la réflexion, une autre méthode consiste à utiliser le 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 ressemble à 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 nom de la classe.

23
darrenp
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);
4
RJ CR

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"
}
1
Pierre

First: ouvrez votre manifest.xml fichier

vous trouverez le nom de votre paquet i.e. "com.company.projectname"

Then: 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"
1
Mahmoud Ayman