Android meta-data
2016-04-26 18:11
477 查看
Android meta-data数据的读取
meta-data元数据,当我们在集成第三方sdk时会经常遇到,比如百度地图sdk,talkingData统计等,所以做了一个小总结,以备使用。
在清单文件中,meta-data可以在Application,Activity,Service,Receiver中,在不同的位置,读取数据的方式有稍微的差别,现写了一个小demo。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dc.metadatasummary01"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!--位于activity中--> <meta-data android:name="in_main_activity" android:value="I am in activity"></meta-data> </activity> <service android:name=".DCTestMetaDataService"> <!--位于服务中--> <meta-data android:name="in_service" android:value="I am in Service"></meta-data> </service> <receiver android:name=".DCTestMetaDataReceiver"> <!--位于广播接收者中--> <intent-filter> <action android:name="dc_test_meta_data_receiver"></action> </intent-filter> <meta-data android:name="in_receiver" android:value="I am in Receiver"></meta-data> </receiver> <!--位于application中--> <meta-data android:name="in_application" android:value="I am in application"></meta-data> </application> </manifest>
1.Activity中拿取数据
ActivityInfo info = this.getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA); String msg = info.metaData.getString("in_main_activity");
2.Application中拿取数据
ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA); String msg = appInfo.metaData.getString("in_application");
3.Service中拿取数据
ComponentName cn = new ComponentName(this, DCTestMetaDataService.class); ServiceInfo info2 = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA); String msg = info2.metaData.getString("in_service");
4.Receiver中拿取数据
ComponentName cn = new ComponentName(context, DCTestMetaDataReceiver.class); ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA); String msg = info.metaData.getString("in_receiver");
MainActivity代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿取activity中的元数据 ActivityInfo info = null; try { info = this.getPackageManager() .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA); String msg = info.metaData.getString("in_main_activity"); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } //拿取application中的元数据 ApplicationInfo appInfo = null; try { appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); String msg = appInfo.metaData.getString("in_application"); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } //开启服务 startService(new Intent(MainActivity.this, DCTestMetaDataService.class)); //发送广播 Intent intent = new Intent(); intent.setAction("dc_test_meta_data_receiver"); sendBroadcast(intent); } @Override protected void onDestroy() { //关闭服务 stopService(new Intent(MainActivity.this, DCTestMetaDataService.class)); super.onDestroy(); }
DCTestMetaDataReceiver代码
/** * @author zyc * created at 2016/4/22 18:01 */ public class DCTestMetaDataReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (TextUtils.equals(intent.getAction(), "dc_test_meta_data_receiver")) { ComponentName cn = new ComponentName(context, DCTestMetaDataReceiver.class); ActivityInfo info = null; try { info = context.getPackageManager() .getReceiverInfo(cn, PackageManager.GET_META_DATA); String msg = info.metaData.getString("in_receiver"); Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } } }
DCTestMetaDataService代码
/** * @author zyc * created at 2016/4/22 11:42 */ public class DCTestMetaDataService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { //拿到meta-data元数据 ComponentName cn = new ComponentName(this, DCTestMetaDataService.class); ServiceInfo info2 = null; try { info2 = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA); String msg = info2.metaData.getString("in_service"); Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }
ok,so easy……
相关文章推荐
- Android---多级树形菜单的实现
- android--TextView[转]
- android--调用系统相机,显示图片
- 获取Android手机或Pad的屏幕的物理尺寸
- android--Activity跳转传值
- android--设置界面以及数据持久化
- android-- 获取路径目录方法以及判断目录是否存在,创建目录
- android--读取sd卡中text文件
- Android--模拟器尺寸大小修改
- android--基于android平台socket服务器端实例
- android--在sd卡中创建文件夹
- Android--toast使用
- android--imageView使用sd卡中图片资源
- android--Java基于Socket文件传输示例
- android--下拉列表 Spinner。
- android--可循环显示图像的Android Gallery组件
- android--系统路径获取
- android+zip4j开源项目问题汇总
- android--No grammar constraints (DTD or XML schema) detected for the document警告
- android--textview实现文字自适应