Android获取Manifest中<meta-data>元素工具类

**
 * Android获取Manifest中<meta-data>元素工具类
 * 在AndroidManifest.xml中,<meta-data>元素可以作为子元素,
 * 被包含在<activity><application><service><receiver>元素中,
 * 不同的父元素,在应用时读取的方法也不同。
 * Created by younghare on 2017/8/16.
 */

public class ManifestMetaDataUtil {
    static String TAG = "MetaDataUtil";

    /**
     *
     * @param context
     * @param metaDataName
     * @return
     *
     * <meta-data    android:name="plunInstallByChannel"     android:value="WWStore" />
     * 调用例子:String  metaDataValue =ManifestMetaDataUtil.getMetaDataInApplicaiton(this,"plunInstallByChannel");
     */
    static public String getMetaDataInApplicaiton(Context context,String metaDataName){
        ApplicationInfo appInfo = null;
        try {
            appInfo = context.getPackageManager()
                    .getApplicationInfo(context.getPackageName(),
                            PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        String msg=appInfo.metaData.getString(metaDataName);
        Log.d(TAG, " metaData Value == " + msg );
        return msg;
    }

    /**
     *
     * @param activity
     * @param metaDataName
     * @return
     *
     * <meta-data android:name="czgActivity" android:value="hello my activity"></meta-data>
     * String  metaDataValue =ManifestMetaDataUtil.getMetaDataInApplicaiton(this,"plunInstallByChannel");
     */
    static public String getMetaDataInActivity(Activity activity, String metaDataName){


        ActivityInfo info= null;
        try {
            info = activity.getPackageManager()
                    .getActivityInfo(activity.getComponentName(),
                            PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        String msg =info.metaData.getString(metaDataName);

        Log.d(TAG, " metaData Value in Activity == " + msg );
        return msg;
    }

    static public String getMetaDataInService(Context context,Class<?> serverClazz, String metaDataName){


        ComponentName cn=new ComponentName(context, serverClazz);
        ServiceInfo info= null;
        try {
            info = context.getPackageManager()
                    .getServiceInfo(cn, PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        String msg=info.metaData.getString(metaDataName);

        Log.d(TAG, " metaData Value in Service == " + msg );
        return msg;
    }


    static public String getMetaDataInReceiver(Context context, Class<?> receiverClazz, String metaDataName){

        ComponentName cn=new ComponentName(context, receiverClazz);
        ActivityInfo info= null;
        try {
            info = context.getPackageManager()
                    .getReceiverInfo(cn, PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        String msg=info.metaData.getString(metaDataName);

        Log.d(TAG, " metaData Value in BroadcastReceiver == " + msg );
        return msg;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 错误:在<manifest><application>发现意外元素<intent-filter>。 这个错误通常是由于在<application>标签放置了<intent-filter>标签而导致的。在<application>标签只能包含与应用程序相关的组件,例如<activity>、<service>和<receiver>等。如果您需要在应用程序级别上定义意图过滤器,请将<intent-filter>标签放置在<activity>、<service>或<receiver>标签。 ### 回答2: 在Android应用程序开发,我们经常会遇到一些错误信息,其一个比较常见的错误是“error: unexpected element <intent-filter> found in <manifest><application>”。这个错误表示在manifest文件的application标签出现了不应该出现的intent-filter元素。那么为什么会出现这个错误呢?如何解决呢? 通常在Android应用程序,intent-filter元素应该出现在Activity、Service或Receiver标签的内部,它用于指定一个组件所能响应的Intent。但是,如果我们在manifest文件的application标签使用intent-filter元素,就会出现“error: unexpected element <intent-filter> found in <manifest><application>”这个错误。 那么如何解决这个错误呢?解决方法其实很简单,只需要将intent-filter元素移到合适的位置就可以了。首先要确认哪个Activity、Service或Receiver使用了这个intent-filter元素,然后将它移动到相应的标签内即可。例如,如果是在MainActivity使用了intent-filter元素,就需要将它移到MainActivity标签内。如果有多个组件使用了同一个intent-filter元素,就需要将它移到每个组件的标签内。 除了移动intent-filter元素以外,我们也可以使用注释将它暂时屏蔽起来,或者干脆将它删除。但是这些方法都不是最优解,最好的做法还是将intent-filter元素移到正确的位置。 总之,遇到“error: unexpected element <intent-filter> found in <manifest><application>”这个错误时不要惊慌,只需要按照上述方法进行处理即可。同时,我们在开发Android应用程序时也要注意标签的嵌套顺序,避免出现这种错误。 ### 回答3: 这个错误发生在Android应用程序开发,通常是由于在AndroidManifest.xml文件的<application>标签内添加了一个不正确的<intent-filter>标签。 在AndroidManifest.xml文件,<application>标签是用来描述应用程序的基本信息和配置的,如图标、名称、版本号等。而<intent-filter>标签则是告诉系统该组件能够处理哪种类型的Intent。 当一个<intent-filter>标签被放置在<application>标签内部时,会导致系统无法正确处理应用程序的基本信息和配置。因此,出现了“error:unexpected element <intent-filter> found in <manifest><application>”错误。 要解决这个问题,可以检查AndroidManifest.xml文件<application>标签内的所有子元素,确保没有意外插入的<intent-filter>标签。如果发现错误,则可以将它们移除并保存文件,再重新编译应用程序就可以解决这个错误。 总之,在Android应用程序开发,正确的使用<application>和<intent-filter>标签是非常重要的,可以避免许多错误和问题。在增加或修改AndroidManifest.xml文件时,一定要仔细检查,以确保文件的语法和结构是正确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值