android 读取manifest的数据

释放双眼,带上耳机,听听看~!

今天,是实在不知道该写点什么,但是还是想保持写博客的习惯,所以在网上找了找资料,于是写了这篇博客。内容很简单,大家如果有兴趣,可以自己在网上搜索相关的资料。

在AndroidManifest.xml清单文件中 我们有时会看到如下类似的<meta-data … >元素开始的配置内容:

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

 

标签<meta-data>是提供组件额外的数据用的,它本身就是一个键值对,可以自定义名称和值。它可以包含在以下组件当中:
<activity>、<application> 、<service> 和 <receiver>

一、如何配置<mate-data…>元素:

标签<meta-data>元素的配置语法如下:

<meta-data android:name="string"
android:resource="resource specification"
android:value="string" />

 

说明:一般的值可以通过value属性来指定,但是如果要指定一个资源的id,则需要使用resource属性来配置。

 

<meta-data android:name="api_key" android:value="@string/api_key" />

二、如何获取<mate-data…>元素配置的值

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.metadatatest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="mTag" android:value="@string/meta_application"></meta-data>
<activity
android:name="com.example.metadatatest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 一般的值可以通过value属性来指定,但是如果要指定一个资源id作为一个值,那么就要用resource属性来代替。 -->
<meta-data android:name="mTag" android:value="@string/meta_activity"></meta-data>
<!--利用resource属性将指定 mResource 的资源id号-->
<meta-data android:name="mResource" android:resource="@drawable/ic_launcher"></meta-data>
</activity>
<service android:name="com.example.metadatatest.service.DemoService">
<meta-data android:name="mTag" android:value="@string/meta_service"></meta-data>
</service>
<receiver android:name="com.example.metadatatest.receiver.DemoReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
<meta-data android:name="mTag" android:value="@string/meta_broadcast"></meta-data>
</receiver>
</application>
</manifest>

 

在activity里获取manifest的mata元素的值

 

package com.example.metadatatest;
import com.example.metadatatest.receiver.DemoReceiver;
import com.example.metadatatest.service.DemoService;
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.PackageManager.NameNotFoundException;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener {
private static final String TAG = MainActivity.class.getSimpleName();
private ImageView iv_pic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
}
private void findView() {
Button bt_read_activity = (Button) findViewById(R.id.bt_read_activity);
Button bt_read_service = (Button) findViewById(R.id.bt_read_service);
Button bt_read_broadcast = (Button) findViewById(R.id.bt_read_broadcast);
Button bt_read_application = (Button) findViewById(R.id.bt_read_application);
iv_pic = (ImageView) findViewById(R.id.iv_pic);
bt_read_activity.setOnClickListener(this);
bt_read_service.setOnClickListener(this);
bt_read_broadcast.setOnClickListener(this);
bt_read_application.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_read_activity:
readMetaDataFromActivity();
break;
case R.id.bt_read_service:
readMetaDataFromService();
break;
case R.id.bt_read_broadcast:
readMetaDataFromBroadCast();
break;
case R.id.bt_read_application:
readMetaDataFromApplication();
break;
default:
break;
}
}
/**
* 读取application 节点  meta-data 信息
*/
private void readMetaDataFromApplication() {
try {
ApplicationInfo appInfo = this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String mTag = appInfo.metaData.getString("mTag");
Log.e(TAG, "mTag=" + mTag);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
/**
* 读取BroadcastReceiver 节点  meta-data 信息
*/
private void readMetaDataFromBroadCast() {
try {
ComponentName cn = new ComponentName(this, DemoReceiver.class);
ActivityInfo info = this.getPackageManager().getReceiverInfo(cn,
PackageManager.GET_META_DATA);
String mTag = info.metaData.getString("mTag");
Log.e(TAG, "mTag=" + mTag);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
/**
* 读取Service 节点  meta-data 信息
*/
private void readMetaDataFromService() {
try {
ComponentName cn = new ComponentName(this, DemoService.class);
ServiceInfo info = this.getPackageManager().getServiceInfo(cn,
PackageManager.GET_META_DATA);
String mTag = info.metaData.getString("mTag");
Log.e(TAG, "mTag=" + mTag);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
/**
* 读取Activity 节点  meta-data 信息
*/
private void readMetaDataFromActivity() {
ActivityInfo info;
try {
info = this.getPackageManager().getActivityInfo(getComponentName(),
PackageManager.GET_META_DATA);
String mTag = info.metaData.getString("mTag");
Log.e(TAG, "mTag=" + mTag);
//读取图片资源id
int mResource = info.metaData.getInt("mResource");
iv_pic.setImageResource(mResource);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}

以上是我把搜集的资料整理出来的内容,写得比较杂乱,所以大家看不懂可以自己在网上搜索资料看一下。

android 读取manifest的数据就讲完了。

就这么简单。

人已赞赏
Android文章

android 获取apk中的素材图片

2020-4-10 19:48:01

Android文章

android studio设置JDK路径

2020-4-10 21:03:02

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索