Android----<meta-data>简要学习使用
2015-10-15 19:31
369 查看
meta-data是什么?
标签meta-data的官方介绍链接:查看Android官方解释meta-data是Android的Manifest文件内activity,activity-alias,application,provider,receiver,service组件下的子标签。用于标识供父组件使用的键值对(name-value pair),如果想在activity中使用meta-data,那么meta-data必须定义在AndroidManifest.xml的activity组件中声明。
如何使用?
meta-data的使用就跟一般的键值对使用一样,在对应的组件下声明name和value如下:<meta-data android:name="zoo" android:value="@string/kangaroo" />
若要提供比较复杂的数据,可以使用android:resource提供该资源的ID:
<meta-data android:name="com.xesam.img" android:resource="@drawable/ic_launcher" />
在代码内获取meta-data
//在Activity应用<meta-data>元素。 ActivityInfo info = this.getPackageManager() .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA); info.metaData.getString("zoo"); info.metaData.getInt("com.xesam.img") ==>获得图片资源对应的资源索引0x7f020000 //在application应用<meta-data>元素。 ApplicationInfo appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA); appInfo.metaData.getString("meta_name"); //在service应用<meta-data>元素。 ComponentName cn = new ComponentName(this, MetaDataService.class); ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA); info.metaData.getString("meta_name"); //在receiver应用<meta-data>元素。 ComponentName cn = new ComponentName(context, MetaDataReceiver.class); ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA); info.metaData.getString("meta_name");
一般使用场景
使用第三方服务提供的开放API,例如:第三方微信、微博登陆,第三方社交通讯融云SDK、百度/讯飞语音识别SDK等,需要注册对应的账户获取加入第三方服务提供的AppKey、AppSecret;然后在使用SDK时加入这些appKey/appSecret,这时一般采用的都是在应用的Manifest文件application组件下加入指定key供SDK使用者填入申请获得的对应值。<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- begin: baidu speech sdk --> <!-- 请填写真实的APP_ID API_KEY SECRET_KEY --> <meta-data android:name="com.baidu.speech.APP_ID" android:value="000000" /> <meta-data android:name="com.baidu.speech.API_KEY" android:value="****************" /> <meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="******************" />
扩展使用
由于meta-data提供的键值对数据是放在PackageItemInfo.metaData内,故而其它应用通过管理获取到该应用的包信息从而获取到对应组件的meta-data。下面的例子为:Android 5.1下锁屏应用通过PackageManager查询匹配给定intent的默认activity组件并且获取activity组件下提供的META_DATA_KEYGUARD_LAYOUT。
<activity android:name="com.android.camera.SecureCameraActivity" android:clearTaskOnLaunch="true" android:configChanges="orientation|screenSize|keyboardHidden" android:excludeFromRecents="true" android:label="@string/app_name" android:taskAffinity="com.android.camera.SecureCameraActivity" android:theme="@style/Theme.Camera" android:windowSoftInputMode="stateAlwaysHidden|adjustPan" > <intent-filter> <action android:name="android.media.action.STILL_IMAGE_CAMERA_SECURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE_SECURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="com.android.keyguard.layout" android:resource="@layout/keyguard_widget" /> </activity> ............ .................... private static final String META_DATA_KEYGUARD_LAYOUT = "com.android.keyguard.layout"; ................... intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE) PackageManager packageManager = mContext.getPackageManager(); final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser( intent, PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser()); if (appList.size() == 0) { return null; } ResolveInfo resolved = packageManager.resolveActivityAsUser(intent, PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA, mLockPatternUtils.getCurrentUser()); if (wouldLaunchResolverActivity(resolved, appList)) { return null; } if (resolved == null || resolved.activityInfo == null) { return null; } if (resolved.activityInfo.metaData == null || resolved.activityInfo.metaData.isEmpty()) { return null; } int layoutId = resolved.activityInfo.metaData.getInt(META_DATA_KEYGUARD_LAYOUT); .............. ......................
相关文章推荐
- meta-data的使用
- Android Manifest之<meta-data>元素中文注释
- meta-data的使用
- Android中meta-data的使用
- Android 用meta-data配置参数
- meta-data
- EC2的meta-data
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定...
- 使用 ApplicationInfo 读取 AndroidManifest.xml 中的meta-data信息
- 如何判断只能是数字,英文字母和中文 及获取androidmanifest.xml中meta-data的配置
- Android 读取<meta-data>元素的数据
- Android获取Manifest中<meta-data>元素的值
- meta-data标签
- Android获取Manifest中<meta-data>元素的值
- Manifest中meta-data扩展元素数据的配置与获取
- 利用meta-data的数据,动态更改contetnprovider的authorities
- android meta-data 使用
- Android meta-data 与 activity-alias
- 31、Android获取meta-data和build.gradle的值
- Android中针对<meta-data>怎么来使用