Android實(shí)現(xiàn)獲取meta-data和build.gradle的值
有時(shí)候會(huì)用到meta-data中的參數(shù),比如定義的渠道號(hào),類似友盟統(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中的值,直接看方法:
/** * 不同的類型要區(qū)別獲取,以下是String類型的 * @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類型的用getString,Boolean類型的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沉浸式狀態(tài)欄 + actionBar漸變 + scrollView頂部伸縮效果
這篇文章主要介紹了Android沉浸式狀態(tài)欄 + actionBar漸變 + scrollView頂部伸縮效果即QQ好友動(dòng)態(tài)頁(yè)面效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12Android自定義圓環(huán)倒計(jì)時(shí)控件
這篇文章主要為大家詳細(xì)介紹了Android自定義圓環(huán)倒計(jì)時(shí)控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android之利用EventBus發(fā)送消息傳遞示例
本篇文章主要介紹了Android之利用EventBus進(jìn)行消息傳遞示例。EventBus是一款針對(duì)Android優(yōu)化的發(fā)布/訂閱事件總線,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果
這篇文章主要介紹了如何利用OpenGL?Shader實(shí)現(xiàn)陰影遮罩效果,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)OpenGL有一定幫助,需要的可以參考一下2022-02-02Android SharedPreferences四種操作模式使用詳解
這篇文章主要介紹了Android SharedPreferences四種操作模式使用詳解的相關(guān)資料,這里介紹了獲取Android SharedPreferences的兩種方法及比較,和操作模式的介紹,需要的朋友可以參考下2017-07-07Android界面 NotificationManager使用Bitmap做圖標(biāo)
Android界面 NotificationManager使用Bitmap做圖標(biāo),如何實(shí)現(xiàn)呢,本文將介紹解決方法,需要的朋友可以參考下2012-12-12