web-dev-qa-db-ja.com

アクティビティ名を動的に取得-android

現在のActivityの名前を取得して、HttpRequestのURIで送信したいと思います。 Activityを特に参照せずにこれを行う方法はありますか?

myActivity.class.toString()を実行できることはわかっていますが、これはActivityへの静的参照を作成しているため、 "myActivity"をハードコーディングする方法としてはあまり効率的ではありません。 'this'のようなものを使用してこれを行うより一般的な方法はありますか(btwは必要な情報より多くの情報を返すため、実際には動作しません)。

67
evanmcdonnal

this.getClass().getSimpleName()を使用して、アクティビティの名前を取得します。

コメントから、OnClickListener(または他の内部クラス)のコンテキストにいる場合、クラスを手動で指定します。

MainActivity.class.getSimpleName()

170
kcoppock

リフレクションを使用したくないかもしれない純粋主義者にとって、別の方法は次のようにPackageManagerを使用することです:

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

ただし、これはgetClass().getName()と同じことをするだけで(getSimpleName()でさえも)多くの作業のように思えます。しかし、クラス名だけでなく、アクティビティに関する詳細な情報が必要な人には便利かもしれません。

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

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

最初:manifest.xmlファイルを開きます

パッケージ名、つまり"com.company.projectname"が見つかります

Then:アクティビティ名をMainActivityとしましょう

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

[〜#〜]または[〜#〜]

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

[〜#〜]または[〜#〜]

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