故事是这样的,那天我看一个第三方平台提供的demo,发现manifest里面有几个meta-data标签,不知道什么意思。虽然大致猜到了是用来配置参数常量的,但还是想探个究竟。它是这么写的<!-- 配置的第三方参数属性 -->
<meta-data android:name="appid" android:value="b03c5cfef65ed30108f0a3fd82c3f6b4" /><meta-data android:name="appkey" android:value="110000" />
这三个标签是写在application下面的。后来我又搜了一下,meta-data还可以出现在activity,receiver,service标签中。包括上面的application中。一共有四个地方可以使用到。
一,在activity中
xml中配置如下
<!-- Activity --> <activity android:name=".MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="activity_name" android:value="activity_value" /> </activity>java代码如下
ActivityInfo actInfo = mContext.getPackageManager().getActivityInfo( getComponentName(), PackageManager.GET_META_DATA); String msg = actInfo.metaData.getString("activity_name");
xml中配置如下
<!-- 服务 --> <service android:name=".MyService"> <meta-data android:name="service_name" android:value="service_value" /> </service>java代码如下
ComponentName cn = new ComponentName(this, MyService.class); try { ServiceInfo serInfo = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA); } catch (NameNotFoundException e) { e.printStackTrace(); } String msg = serInfo.metaData.getString("service_name");
xml中配置如下
<!-- app --> <meta-data android:name="application_name" android:value="application_value" />java代码如下
ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo( getPackageName(), PackageManager.GET_META_DATA); String msg = appInfo.metaData.getString("application_name");
<receiver android:name=".MyReceiver"> <meta-data android:name="receiver_name" android:value="receiver_value" /> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver>java代码如下
if (TextUtils.equals("android.intent.action.PHONE_STATE", intent .getAction())) { ComponentName cn = new ComponentName(context, MyReceiver.class); try { ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA); } catch (NameNotFoundException e) { e.printStackTrace(); } String msg = info.metaData.getString("receiver_name"); // 打电话测试即可 Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); }
这个数据配置为什么要这么写,我还没发现它的好,以后慢慢领悟再来续写。我觉得大可以写一个ConstData类来存放id,key之类的参数。
下载demo:http://download.csdn.net/detail/r8hzgemq/4815141