Android實(shí)現(xiàn)獲取meta-data和build.gradle的值
有時(shí)候會(huì)用到meta-data中的參數(shù),比如定義的渠道號(hào),類(lèi)似友盟統(tǒng)計(jì)。也會(huì)用到定義在build.gradle文件中android標(biāo)簽下的defaultConfig標(biāo)簽下,添加manifestPlaceholders標(biāo)簽中,有可能也會(huì)用到渠道值。
<meta-data
android:name="UMENG_CHANNEL"
android:value="0"/>
首先獲取meta-data中的值,直接看方法:
/**
* 不同的類(lèi)型要區(qū)別獲取,以下是String類(lèi)型的
* @param context 上下午
* @param metaName meta-data定義的名字
* @param defaultValue 默認(rèn)值
* @return
*/
public static String getAppMetaDataString(Context context, String metaName, String defaultValue) {
try {
//application標(biāo)簽下用getApplicationinfo,如果是activity下的用getActivityInfo
//Sting類(lèi)型的用getString,Boolean類(lèi)型的getBoolean,其他具體看api
String value = context.getPackageManager()
.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA)
.metaData.getString(metaName, defaultValue);
return value;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return defaultValue;
}
}
獲取build.gradle中的值:
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "xxxxxxxxxxxxxxxxx", //JPush上注冊(cè)的包名對(duì)應(yīng)的appkey.
JPUSH_CHANNEL : "developer-default", //暫時(shí)填寫(xiě)默認(rèn)值即可.
]
原理是一樣的,manifestPlaceholders標(biāo)簽下的值需要在清單文件AndroidManifest.xml中占位顯示,這里占位極光渠道號(hào)(ps:不知道極光文檔有沒(méi)有直接獲取的):
這里 name 為 名字隨意,不重復(fù)就行,value 為manifestPlaceholders下的定義的值,必須采用 ${變量值}
<meta-data android:name="JPUSH_CHANNEL"
android:value="${JPUSH_CHANNEL}"/>
同用方法
/**
* 獲取MetaData信息
*
* @param name
* @param def
* @return
*/
public static String getMetaDataValue(Context context, String name,
String def) {
String value = getMetaDataValue(context, name);
return (value == null) ? def : value;
}
public static String getMetaDataValue(Context context, String name) {
Object value = null;
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo;
try {
applicationInfo = packageManager.getApplicationInfo(
context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null && applicationInfo.metaData != null) {
value = applicationInfo.metaData.get(name);
}
} catch (PackageManager.NameNotFoundException e) {
throw new RuntimeException(
"Could not read the name in the manifest file.", e);
}
if (value == null) {
throw new RuntimeException("The name '" + name
+ "' is not defined in the manifest file's meta data.");
}
return value.toString();
}
所以又回到了上一步,去獲取meta-data中的值了。說(shuō)到底還是熟不熟悉PackageManager
補(bǔ)充知識(shí):android meta data值獲取的坑
獲取meta data的時(shí)候,正常的非純數(shù)字的字符串,設(shè)置在value里面,用getString獲取是正常的。
但是如果含有純數(shù)字的字符串,用getString獲取返回為null。也許你會(huì)想到用getInt,getLong獲取,很抱歉,也可能是null。
解決方式有兩種:
一.
繼續(xù)使用value="1234567890",但是在純數(shù)字字符串開(kāi)頭加上"\ "(反斜杠+空格)這樣系統(tǒng)會(huì)自動(dòng)讀取為字符串而不是其他格式,形如
<meta-data android:name="appkey" android:value="\ 1234567890" />
二. 使用resources屬性通過(guò)getInt獲取資源id,再獲取資源id對(duì)應(yīng)的值,這種方式可擴(kuò)展性很強(qiáng),可以獲取所有資源而不只是string,形如
<meta-data android:name="appkey" android:resource="@string/AppKey" />
在strings.xml中定義AppKey的值為
<string name="AppKey">1234567890</string>
三.Application下獲取meta資源的方式
public static String getStringMetaData(String name) {
int valueId = 0;
try {
ApplicationInfo appInfo = getApplicationContext().getPackageManager()
.getApplicationInfo(getApplicationContext().getPackageName(),
PackageManager.GET_META_DATA);
valueId = appInfo.metaData.getInt(name);
if (valueId != 0) {
return getApplicationContext().getResources().getString(valueId);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
以上這篇Android實(shí)現(xiàn)獲取meta-data和build.gradle的值就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)微信側(cè)滑關(guān)閉頁(yè)面效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)微信側(cè)滑關(guān)閉頁(yè)面效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android checkbox的listView(多選,全選,反選)具體實(shí)現(xiàn)方法
由于listview的一些特性,剛開(kāi)始寫(xiě)這種需求的功能的時(shí)候都會(huì)碰到一些問(wèn)題,重點(diǎn)就是存儲(chǔ)每個(gè)checkbox的狀態(tài)值,在這里分享出了完美解決方法:2013-06-06
TextView實(shí)現(xiàn)跑馬燈效果 就這么簡(jiǎn)單!
TextView實(shí)現(xiàn)跑馬燈效果,就這么簡(jiǎn)單輕松實(shí)現(xiàn),這篇文章介紹了TextView制作跑馬燈效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Flutter搞定寬高不統(tǒng)一布局開(kāi)發(fā)的方法詳解
我們?cè)陂_(kāi)發(fā)移動(dòng)端界面的時(shí)候,經(jīng)常會(huì)遇到一組尺寸不一的組件需要作為同一組展示,所以本文就將利用Wrap組件搞定寬高不統(tǒng)一布局開(kāi)發(fā),需要的可以參考一下2023-06-06
Android實(shí)現(xiàn)調(diào)用震動(dòng)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)調(diào)用震動(dòng)的方法,實(shí)例分析了Android中Vibrator類(lèi)的調(diào)用與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android基于ImageSwitcher實(shí)現(xiàn)圖片切換功能
這篇文章主要介紹了Android基于ImageSwitcher實(shí)現(xiàn)圖片切換功能的相關(guān)資料,需要的朋友可以參考下2016-02-02
用MOB實(shí)例開(kāi)發(fā)實(shí)現(xiàn)短信驗(yàn)證功能
本篇文章通學(xué)習(xí)通過(guò)MOB平臺(tái)開(kāi)發(fā)APP實(shí)現(xiàn)簡(jiǎn)單的短信驗(yàn)證功能,對(duì)此有需求的朋友跟著好好學(xué)習(xí)下吧。2018-01-01
Android網(wǎng)格布局GridView學(xué)習(xí)使用
這篇文章主要為大家詳細(xì)介紹了Android網(wǎng)格布局GirdView的學(xué)習(xí)使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android ImageView隨手勢(shì)變化動(dòng)態(tài)縮放圖片
這篇文章主要為大家詳細(xì)介紹了Android ImageView隨手勢(shì)變化動(dòng)態(tài)縮放圖片的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-05-05

