有時候會用到meta-data中的參數(shù),比如定義的渠道號,類似友盟統(tǒng)計。也會用到定義在build.gradle文件中android標簽下的defaultConfig標簽下,添加manifestPlaceholders標簽中,有可能也會用到渠道值。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供西寧企業(yè)網站建設,專注與網站建設、成都做網站、H5網站設計、小程序制作等業(yè)務。10年已為西寧眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站建設公司優(yōu)惠進行中。
<meta-data
      android:name="UMENG_CHANNEL"
      android:value="0"/>首先獲取meta-data中的值,直接看方法:
 /**
   * 不同的類型要區(qū)別獲取,以下是String類型的
   * @param context 上下午
   * @param metaName meta-data定義的名字
   * @param defaultValue 默認值
   * @return
   */
  public static String getAppMetaDataString(Context context, String metaName, String defaultValue) {
    try {
      //application標簽下用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上注冊的包名對應的appkey.
        JPUSH_CHANNEL : "developer-default", //暫時填寫默認值即可.
    ]原理是一樣的,manifestPlaceholders標簽下的值需要在清單文件AndroidManifest.xml中占位顯示,這里占位極光渠道號(ps:不知道極光文檔有沒有直接獲取的):
這里 name 為 名字隨意,不重復就行,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中的值了。說到底還是熟不熟悉PackageManager
補充知識:android meta data值獲取的坑
獲取meta data的時候,正常的非純數(shù)字的字符串,設置在value里面,用getString獲取是正常的。
但是如果含有純數(shù)字的字符串,用getString獲取返回為null。也許你會想到用getInt,getLong獲取,很抱歉,也可能是null。
解決方式有兩種:
一.
繼續(xù)使用value="1234567890",但是在純數(shù)字字符串開頭加上"\ "(反斜杠+空格)這樣系統(tǒng)會自動讀取為字符串而不是其他格式,形如
<meta-data android:name="appkey" android:value="\ 1234567890" />
二.使用resources屬性通過getInt獲取資源id,再獲取資源id對應的值,這種方式可擴展性很強,可以獲取所有資源而不只是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實現(xiàn)獲取meta-data和build.gradle的值就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。
                本文題目:Android實現(xiàn)獲取meta-data和build.gradle的值
                
                文章網址:http://www.chinadenli.net/article10/pgsigo.html
            
成都網站建設公司_創(chuàng)新互聯(lián),為您提供Google、網站設計公司、響應式網站、網站營銷、網頁設計公司、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
