80 lines
2.9 KiB
Java
80 lines
2.9 KiB
Java
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;
|
||
}
|
||
}
|
||
} |