android开发中获取数据

时间:2021-11-22 17:29:52

  在 AndroidManifest.xml 中,<meta-data>元素是一个键值对,往往被包含在<application> 、<activity>、<service>和<receiver>等元素中,但是不同父元素中<meta-data>读取方法也不同。

  <meta-data>基本结构:<meta-data android:name="string" android:resource="resource specification" android:value = "string" /> (其中resource、value两者选其一),一个组件元素能够包含任意数量的<meta-data>子元素,它们所有的值都会被收集在Bundle对象中,作为组件的 PackageItemInfo.metaData 字段。

  android:name 元数据项的名字,需保证唯一性。

  android:resource 资源的一个引用,指定给这个项的值是该资源的id。该id可通过bundle.getInt()从<meta-data>中获取。

  android:value 指定给这一项的值,可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法如下。

 数据类型  示例 获取方法
 字符串  "abcd"  getString()
 整数  "1"  getInt()
 布尔  "true"  getBoolean()
 颜色  "#rgb", "#argb", "#rrggbb"  getInt()
 浮点  "1.1"  getFloat()

  

  

  一般的值可以通过value属性来指定,但是如果要指定一个资源id作为一个值,那么就要用resource属性来代替。假如 <meta-data android:name="test_name" android:value="test_value" />,则在不同父元素中读取方法如下所示:

1、读取<application>中的<meta-data>
 import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
try
{
  ApplicationInfo info = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
  String value = info.metaData.getString("test_name");
}
catch (NameNotFoundException e)
{
  e.printStackTrace();
}
2、读取<activity>中的<meta-data> 
 import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
try
{
  ActivityInfo info = this.getPackageManager().getActivityInfo(getPackageName(), PackageManager.GET_META_DATA);
  String value = info.metaData.getString("test_name");
}
catch (NameNotFoundException e)
{
  e.printStackTrace();
}
3、读取<service>中的<meta-data>
 ComponentName cn = new ComponentName(this, MetaDataService.class);
ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
String value = info.metaData.getString("test_name");
4、读取<receiver>中的<meta-data>
 ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
String value = info.metaData.getString("test_name");