365連休

にわかのandroidとかの開発メモ。

Android Studio 3.5 マニフェストファイルの様々な設定値を参照する方法

プログラム上からAndroidManifest.xmlなどの設定値を参照する方法。

 

Activity activity = this; //例えばActivity内で実行した場合
Context context = activity;

PackageManager packageManager = context.getPackageManager();

try {
    //アプリアイコン
    Drawable icon = packageManager.getApplicationIcon(context.getPackageName());

    //Manifest.xmlに関連するもの
    PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
    String versionName = packageInfo.versionName;


    //Manifest.xmlのApplicationタグに関連するもの
    ApplicationInfo appInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
    //appInfo = packageInfo.applicationInfo; こういう事もできる
    int targetSdkVersion = appInfo.targetSdkVersion;

    //Applicationタグのメタデータ
    String meta_hoge = appInfo.metaData.getString("ほげ");

    //アプリ名、普通はリソースから参照するから使わなさそう
    CharSequence applicationLabel = packageManager.getApplicationLabel(appInfo);

    //hideのため参照できない
    //appInfo.hasRequestedLegacyExternalStorage();


    //Manifest.xmlのActivityタグとReceiverタグに関連するもの
    ActivityInfo activityInfo = packageManager.getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
    boolean isFixedOrientationLandscape =
                       (activityInfo.screenOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
                    || (activityInfo.screenOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE)
                    || (activityInfo.screenOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)
                    || (activityInfo.screenOrientation == ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);

    //Activityのメタデータ
    String metaData_fuga = activityInfo.metaData.getString("ふが");

} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

 

各infoクラスの@hideになってるis系メソッドを使えると便利なんだけどな~