Screaming Loud

日々是精進

contextからactivityのクラス名を取得する

contextからactivityのクラス名を取得しようとしていたのですが、なかなかWeb上になくハマったのでメモしておきます。

PackageInfo pInfo;
String className = "";
try {
  pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), context.getPackageManager().GET_ACTIVITIES);
  className = pInfo.activities[0].name;
  Log.d(TAG, className);
} catch (NameNotFoundException e) {
  e.printStackTrace();
}

上記のようにやると取得できます。

解説
context.getApplicationInfo().className

では、取れないということです。
Manifestにおいて、<activity>は<application>中に複数書くことができるので、リスト構造になっているという点がキモです。

getPackageInfo(String packageName, int flag)

このgetPackageInfo()を利用すると、パッケージ情報が取得できます。
ここで、flagの設定が必要で、GET_ACTIVITIESを立てると、activityを取得することができるようになります。

あとは、activityフィールドから取得することで、classNameがめでたく取得することができるようになります。