Android读取AndroidManifest.xml中的<meta-data>元素

本文介绍了在Android开发中如何使用&lt;meta-data&gt;元素为Activity、Application、Service及Broadcast Receiver传递配置信息,并提供了具体的XML声明与Java获取方式。

在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但
不同的父元素,在应用时读取的方法也不同。

1 :在Activity的应用。
    xml代码段:
   <activity...>
       <meta-data android:name="myMsg" android:value="hello my activity"></meta-data>
    </activity>
    
    java代码段:
   ActivityInfo info=this.getPackageManager()
                          .getActivityInfo(getComponentName(),
                          PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

2:在application的应用。
   xml代码段:
  <application...>
       <meta-data android:value="hello my application" android:name="myMsg"></meta-data>
   </application>
   
   java代码段:
    ApplicationInfo appInfo = this.getPackageManager()
                                  .getApplicationInfo(getPackageName(), 
                          PackageManager.GET_META_DATA);
    String msg=appInfo.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

3:在service的应用。
   xml代码段:
   <service android:name="MetaDataService">
      <meta-data android:value="hello my service" android:name="myMsg"></meta-data>
   </service>

   java代码段:
   ComponentName cn=new ComponentName(this, MetaDataService.class);
   ServiceInfo info=this.getPackageManager()
                        .getServiceInfo(cn, PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

4: 在receiver的应用。
   xml代码段:
    <receiver android:name="MetaDataReceiver">
            <meta-data android:value="hello my receiver" android:name="myMsg"></meta-data>
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE"></action>
            </intent-filter>
    </receiver>
   java代码段:
    ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
    ActivityInfo info=context.getPackageManager()
                             .getReceiverInfo(cn, PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);
 

这是我的配置 <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
那你再帮我检查一下AndroidManifest.xml有没有问题?代码如下:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.bus"> <!-- 获取精确位置(GPS + 网络) --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 获取粗略位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 请求后台定位权限 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 访问网络状态 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 读取设备状态(用于生成设备标识) --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:name=".MyApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Bus"> <!-- 高德地图 API Key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="a487b8aa9be4ecdcb101a04a9eecff8a" /> <activity android:name=".SearchResultActivity" /> <activity android:name=".RoutePlanActivity" /> <activity android:name=".AboutActivity" android:exported="false" android:parentActivityName=".MainActivity" /> <activity android:name=".SurveyActivity" android:label="用户调研" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
11-07
一步步来,我有点蒙。我的AndroidManifest.xml代码如下:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.bus"> <!-- 获取精确位置(GPS + 网络) --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 获取粗略位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 请求后台定位权限 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 访问网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 读取设备状态(用于生成设备标识) --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 使用 GPS --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:name=".MyApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Bus"> <!-- 高德地图 API Key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="a487b8aa9be4ecdcb101a04a9eecff8a" /> <activity android:name=".SearchResultActivity" /> <activity android:name=".RoutePlanActivity" /> <activity android:name=".AboutActivity" android:exported="false" android:parentActivityName=".MainActivity" /> <activity android:name=".SurveyActivity" android:label="用户调研" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
11-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值