package com.unity.plugin; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; /** * Unity 安卓插件 - meta-data 读取工具类 * 支持读取 application 节点下的 meta-data,兼容多类型值 */ public class MetaDataReader { // 日志标签(方便Logcat调试) private static final String TAG = "Unity-MetaDataReader"; // PackageManager标记:获取meta-data(固定值,Android原生常量) private static final int GET_META_DATA = PackageManager.GET_META_DATA; // 上下文对象(Android核心,所有资源/配置读取都依赖) private final Context mContext; /** * 构造方法:传入Context(Unity中传入currentActivity即可) * @param context 上下文(Activity/Application均可) */ public MetaDataReader(Context context) { this.mContext = context; } // ------------------------ 读取 Application 节点下的 meta-data ------------------------ /** * 读取application节点 - 字符串值 * @param metaName android:name 属性值 * @return 对应value,未找到返回null */ public String getAppMetaDataString(String metaName) { Bundle metaData = getAppMetaDataBundle(); return metaData == null ? null : metaData.getString(metaName); } /** * 读取application节点 - 整型值 * @param metaName android:name 属性值 * @param defValue 未找到/类型错误的默认值 * @return 对应value或默认值 */ public int getAppMetaDataInt(String metaName, int defValue) { Bundle metaData = getAppMetaDataBundle(); return metaData == null ? defValue : metaData.getInt(metaName, defValue); } /** * 读取application节点 - 布尔型值 * @param metaName android:name 属性值 * @param defValue 未找到/类型错误的默认值 * @return 对应value或默认值 */ public boolean getAppMetaDataBoolean(String metaName, boolean defValue) { Bundle metaData = getAppMetaDataBundle(); return metaData == null ? defValue : metaData.getBoolean(metaName, defValue); } // ------------------------ 核心私有工具方法(获取meta-data的Bundle对象) ------------------------ /** * 获取Application节点的meta-data Bundle * ApplicationInfo.metaData 直接存储全局meta-data */ private Bundle getAppMetaDataBundle() { try { ApplicationInfo appInfo = mContext.getPackageManager() .getApplicationInfo(mContext.getPackageName(), GET_META_DATA); return appInfo != null ? appInfo.metaData : null; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return null; } } }