現在のActivity
の名前を取得して、HttpRequest
のURIで送信したいと思います。 Activity
を特に参照せずにこれを行う方法はありますか?
myActivity.class.toString()
を実行できることはわかっていますが、これはActivity
への静的参照を作成しているため、 "myActivity"をハードコーディングする方法としてはあまり効率的ではありません。 'this'のようなものを使用してこれを行うより一般的な方法はありますか(btwは必要な情報より多くの情報を返すため、実際には動作しません)。
this.getClass().getSimpleName()
を使用して、アクティビティの名前を取得します。
コメントから、OnClickListener
(または他の内部クラス)のコンテキストにいる場合、クラスを手動で指定します。
MainActivity.class.getSimpleName()
リフレクションを使用したくないかもしれない純粋主義者にとって、別の方法は次のように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()
でさえも)多くの作業のように思えます。しかし、クラス名だけでなく、アクティビティに関する詳細な情報が必要な人には便利かもしれません。
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);
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"
}
最初: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"