Android之meta-data

来源:互联网 发布:金融分销系统源码 编辑:程序博客网 时间:2024/05/05 18:47

本文主要记录一些零碎的东西

使用过半收费的SDK的都会涉及到key,比如使用百度地图等,都会让你申请密钥,然后写在manifest文件里。一直没有思考,都是直接使用,今天看了一下meta-data,googleAPI:https://developer.android.com/reference/android/media/MediaMetadata.html

meta-data,主要用来定义一些组件相关的配置值,想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中

里面包含三个属性,name,value和resource,一般的值可以通过value属性来指定,但是如果要指定一个资源的id,则需要使用resource属性来配置,可以获取到id,然后可以根据id再进行取值,下面来看一下测试

manifest文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.cl.slack.metedata"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <meta-data            android:name="meta_name"            android:value="I from application" />        <activity            android:name="com.cl.slack.metedata.MainActivity"            android:label="@string/app_name" >            <meta-data                android:name="meta_name"                android:value="I from activity" />            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <service android:name=".MetaDataService" >           <!--              <meta-data                android:name="meta_name"                android:value="@string/serivce" />             -->            <meta-data                android:name="meta_name"                android:resource="@string/serivce" />        </service>        <receiver android:name=".MetaDataReceiver" >            <meta-data                android:name="meta_name"                android:value="I from receiver" />        </receiver>    </application></manifest>
MainiActivity文件

import android.os.Bundle;import android.app.Activity;import android.content.ComponentName;import android.content.pm.ActivityInfo;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.content.pm.ServiceInfo;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {//在Activity应用<meta-data>元素。    ActivityInfo info = this.getPackageManager()            .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);    Log.i("slack", info.metaData.getString("meta_name"));    //在application应用<meta-data>元素。    ApplicationInfo appInfo = this.getPackageManager()            .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);    Log.i("slack", appInfo.metaData.getString("meta_name"));    //在service应用<meta-data>元素。    ComponentName cn = new ComponentName(this, MetaDataService.class);    ServiceInfo serviceInfo = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);//    Log.i("slack",serviceInfo.metaData.getString("meta_name"));    // 获取到的是 @string/serivce 对应的资源id值    Log.i("slack","id:"+serviceInfo.metaData.getInt("meta_name"));    Log.i("slack","value:"+getString(serviceInfo.metaData.getInt("meta_name")));    //在receiver应用<meta-data>元素。    ComponentName cn2 = new ComponentName(this, MetaDataReceiver.class);    ActivityInfo receiverInfo = this.getPackageManager().getReceiverInfo(cn2, PackageManager.GET_META_DATA);    Log.i("slack",receiverInfo.metaData.getString("meta_name"));    } catch (Exception e) {Log.i("slack",e.toString());}}}

res下的values下的string.xml文件里新增一个,添加后结果

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">MeteData</string>    <string name="action_settings">Settings</string>    <string name="hello_world">Hello world!</string>        <string name="serivce">I from serivce</string></resources>

还需要新建一个service和receiver,里面什么都不用写,测试嘛

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class MetaDataReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub}}import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MetaDataService extends Service {@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}}
结果就日志输出了,看一下








0 0
原创粉丝点击