Android 读取<meta-data>元素中的数据

本文详细介绍了如何在Android中从Application、Activity、Service和BroadcastReceiver等不同组件的&lt;meta-data&gt;元素读取配置数据。通过获取包管理器并调用相应的方法,可以轻松访问这些元数据值。

众所周知, 每个组件都有<meta-data>元素, 用于接收一些外部数据(eg: appKey), 那其中的值应该怎么读取呢. 

1> Application

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="application_meta_data"
            android:value="application_meta_data_value" />  <!--可以关联资源ID, 支持多种数据类型 -->
ApplicationInfo info = null;
        
     try {
         info = getPackageManager()
                   .getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
     } catch (NameNotFoundException e) {
         e.printStackTrace();
     }
Log.v(TAG, "application meta data value:" + info.metaData.getString("application_meta_data"));

2> Activity 

<activity
        android:name="fyc.app.testandroid.MainActivity" >
        <meta-data
            android:name="activity_meta_data"
            android:value="activity_meta_data_value" />
</activity>
ActivityInfo info = null;
        
    try {
        info = getPackageManager()
                 .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    }
Log.v(TAG, "activity meta data value:" + info.metaData.getString("activity_meta_data"));

 3> Service

<service android:name="fyc.app.testandroid.MyService" >
            <meta-data
                android:name="service_meta_data"
                android:value="service_meta_data_value" />
</service>
ServiceInfo info = null;
        
    try {
        info = getPackageManager()
                .getServiceInfo(new ComponentName(this, MyService.class), PackageManager.GET_META_DATA);  //如果在当前组件获取直接使用getcomponentName()
    } catch (NameNotFoundException e) {
            e.printStackTrace();
    }
Log.v(TAG, "service meta data value:" + info.metaData.getString("service_meta_data"));

 4> BroadcastReceiver

<receiver android:name="fyc.app.testandroid.MyReceiver" >
        <meta-data
                android:name="receiver_meta_data"
                android:value="receiver_meta_data_value" />
</receiver>
ActivityInfo info = null;
        
    try {
        info = getPackageManager()
                .getReceiverInfo(new ComponentName(this, MyReceiver.class), PackageManager.GET_META_DATA);
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    }
Log.v(TAG, "receiver meta data value:" + info.metaData.getString("receiver_meta_data"));

 Logcat输出信息 

11:11:46.733: V/MainActivity(571): application meta data value:application_meta_data_value
11:11:46.733: V/MainActivity(571): activity meta data value:activity_meta_data_value
11:11:46.763: V/MainActivity(571): service meta data value:service_meta_data_value
11:11:46.783: V/MainActivity(571): receiver meta data value:receiver_meta_data_value

 官方介绍

http://developer.android.com/guide/topics/manifest/meta-data-element.html

 

 

转载于:https://www.cnblogs.com/fangyucun/p/3309587.html

这是我的配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.gznw.szjl"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取网络状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取设备信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取MAC地址--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读写sdcard,storage等等 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 允许程序录制音频 --> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- OPTIONAL PERMISSIONS, REMOVE WHATEVER YOU DO NOT NEED --> <!-- <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />--> <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> <!-- <uses-permission android:name="android.permission.USE_FINGERPRINT" />--> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- These require runtime permissions on M --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Oppo 推送 --> <uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE" /> <uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE" /> <!-- 魅族推送 --> <uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE" /> <permission android:name="${applicationId}.push.permission.MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.push.permission.MESSAGE" /> <!-- 兼容flyme3.0配置权限--> <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <!-- <uses-permission android:name="android.permission.WRITE_SETTINGS" />--> <!-- END OPTIONAL PERMISSIONS --> <!-- 小米推送 --> <permission android:name="${applicationId}.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.MIPUSH_RECEIVE" /> <!-- 刚移除 --> <!-- <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" tools:ignore="ProtectedPermissions" /> --> <application android:name=".MainApplication" android:label="${app_name}" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" android:allowBackup="true" android:largeHeap="true" android:usesCleartextTraffic="true" tools:replace="android:label,android:value,android:theme,android:allowBackup" android:networkSecurityConfig="@xml/network_security_config"> <meta-data android:name="com.amap.api.v2.apikey" android:value="${amapKey}" /> <activity android:name=".MainActivity" android:launchMode="singleTask" android:screenOrientation="portrait" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="szjl" /> </intent-filter> </activity> <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> <activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity" android:theme="@style/Base.Theme.AppCompat"> </activity> <!-- 小米推送配置 --> <service android:name="com.xiaomi.push.service.XMJobService" android:enabled="true" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE" android:process=":mixpush" /> <service android:name="com.xiaomi.push.service.XMPushService" android:enabled="true" android:process=":mixpush" /> <receiver android:name="com.xiaomi.push.service.receivers.PingReceiver" android:exported="false" android:process=":mixpush"> <intent-filter> <action android:name="com.xiaomi.push.PING_TIMER" /> </intent-filter> </receiver> <receiver android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" android:exported="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <service android:name="com.xiaomi.mipush.sdk.PushMessageHandler" android:enabled="true" android:exported="true" /> <service android:name="com.xiaomi.mipush.sdk.MessageHandleService" android:enabled="true" /> <receiver android:name="com.netease.nimlib.mixpush.mi.MiPushReceiver" android:exported="true"> <intent-filter android:priority="0x7fffffff"> <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" /> <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" /> <action android:name="com.xiaomi.mipush.ERROR" /> </intent-filter> </receiver> <!--华为推送配置--> <service android:name="com.netease.nimlib.mixpush.hw.HWPushService" android:exported="false"> <intent-filter> <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> </intent-filter> </service> <!--按照官方文档不需要配置,读取的是agconnect-service.json文件配置,测试结果是读取不到只能加上该配置--> <meta-data android:name="com.huawei.hms.client.appid" android:value="${hwappid}" /> <!--Vivo推送--> <service android:name="com.vivo.push.sdk.service.CommandClientService" android:exported="true" /> <activity android:name="com.vivo.push.sdk.LinkProxyClientActivity" android:exported="false" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <receiver android:name="com.netease.nimlib.mixpush.vivo.VivoPushReceiver"> <intent-filter> <!-- 接收 push 消息 --> <action android:name="com.vivo.pushclient.action.RECEIVE" /> </intent-filter> </receiver> <!--Vivo Push开放平台中应用的appid 和api key--> <meta-data android:name="com.vivo.push.api_key" android:value="${vivoappkey}" /> <meta-data android:name="com.vivo.push.app_id" android:value="${vivoappid}" /> <!--oppo推送--> <service android:name="com.netease.nimlib.mixpush.oppo.OppoPushService" android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE"> <intent-filter> <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" /> </intent-filter> </service> <service android:name="com.netease.nimlib.mixpush.oppo.OppoAppPushService" android:permission="com.heytap.mcs.permission.SEND_MCS_MESSAGE"> <intent-filter> <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" /> </intent-filter> </service> <!-- 魅族推送 --> <receiver android:name="com.netease.nimlib.mixpush.mz.MZPushReceiver"> <intent-filter android:priority="0x7fffffff"> <!-- 接收push消息 --> <action android:name="com.meizu.flyme.push.intent.MESSAGE" /> <!-- 接收register消息 --> <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" /> <!-- 接收unregister消息--> <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" /> <!-- 兼容低版本Flyme3推送服务配置 --> <action android:name="com.meizu.c2dm.intent.REGISTRATION" /> <action android:name="com.meizu.c2dm.intent.RECEIVE" /> <category android:name="${applicationId}" /> </intent-filter> </receiver> <provider android:name="com.imagepicker.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider> <activity android:name=".wxapi.WXEntryActivity" android:label="@string/app_name" android:exported="true" /> <!-- 蒲公英 --> <meta-data android:name="PGYER_API_KEY" android:value="${pgyerApiKey}" /> <meta-data android:name="PGYER_FRONTJS_KEY" android:value="${pgyerFrontKey}" /> <!--添加新版本检测--> <meta-data android:name="PGYER_FEATURE_CHECK_UNPDATE" android:value="true" /> </application> </manifest>
最新发布
09-23
安卓9开机启动<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.autonavi.amapauto" platformBuildVersionCode="31" platformBuildVersionName="12" android:versionCode="21000001" android:versionName="7.5.0.600082" android:compileSdkVersion="31" android:compileSdkVersionCodename="12"> <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23"/> <!-- 修改或删除您共享存储空间中的内容 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/> <uses-permission android:name="android.permission.MANAGE_USB"/> <!-- 查看网络连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 拥有完全的网络访问权限 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 开机启动 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- 访问WiFi网络状态信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 读取手机状态和身份 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 访问额外的位置提供命令 --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <!-- 获取精确的位置信息 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 获取粗略的位置信息 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 录音 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <!-- 此应用可显示在其他应用上方 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <!-- 检索正在运行的应用 --> <uses-permission android:name="android.permission.GET_TASKS"/> <!-- 防止手机休眠 --> <uses-permission android:name="android.permission.WAKE_LOCK"/> <!-- 访问蓝牙设置 --> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <!-- 与蓝牙设备配对 --> <uses-permission android:name="android.permission.BLUETOOTH"/> <!-- 拍摄照片或视频 --> <uses-permission android:name="android.permission.CAMERA"/> <!-- 允许应用在后台访问位置信息 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <!-- 允许在安卓设备上显示通知 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- 运行前台服务 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <permission android:label="Allow write content provider" android:name="com.autonavi.amapauto.permission.WRITE_CONTENTPROVIDER" android:protectionLevel="normal"/> <uses-permission android:name="com.autonavi.amapauto.permission.WRITE_CONTENTPROVIDER"/> <!-- 读取您共享存储空间中的内容 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!-- 请求安装文件包 --> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <uses-permission android:name="com.autonavi.amapauto_com.hihonor.security.permission.ACCESS_THREAT_DETECTION"/> <!-- 连接WIFI或断开连接 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 修改系统设置 --> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <application android:theme="@style/Theme.Background" android:label="@string/app_name" android:icon="@drawable/v3_icon" android:name="com.autonavi.amapauto.app.MapApplicationProxy" android:allowBackup="false" android:supportsRtl="true" android:resizeableActivity="true" android:networkSecurityConfig="@xml/network_security_config" android:appComponentFactory="androidx.core.app.CoreComponentFactory"> <meta-data android:name="android.max_aspect" android:value="2.1"/> <uses-library android:name="org.apache.http.legacy" android:required="false"/> <meta-data android:name="autonavi_bootstrap_id" android:value="7c6dedf41575847c1b97b8cb90859238d6fcb7a7"/> <meta-data android:name="autonavi_directBootAware" android:value="false"/> <meta-data android:name="autonavi_disableNSUDirectBootAware" android:value="false"/> <meta-data android:name="autonavi_disableExternalFilesDir" android:value="false"/> <meta-data android:name="autonavi_carEnergyIgnore" android:value="false"/> <activity android:icon="@drawable/v3_icon" android:name="com.autonavi.auto.MainMapActivity" android:exported="true" android:launchMode="singleTask" android:screenOrientation="user" android:configChanges="fontScale|layoutDirection|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale|mnc|mcc"/> <activity android:icon="@drawable/v3_icon" android:name="com.autonavi.auto.remote.fill.UsbFillActivity" android:exported="true" android:launchMode="singleTask" android:screenOrientation="user" android:configChanges="fontScale|layoutDirection|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard APP
07-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值