当前位置: 移动技术网 > IT编程>移动开发>Android > Android获取清单文件中的meta-data,解决碰到数值为null的问题

Android获取清单文件中的meta-data,解决碰到数值为null的问题

2020年05月11日  | 移动技术网IT编程  | 我要评论

法国化妆品有哪些,轮滑教学,洪武大案演员表

1.meta-data是什么?如何获取meta-data?

在androidmanifest.xml中,元素可以作为子元素,被包在activity、application 、service、或者receiver元素中,不同的父元素,在应用时读取的方法也不同。

在activity中:

    activityinfo info = null;
    try {
      info = this.getpackagemanager().getactivityinfo(getcomponentname(), packagemanager.get_meta_data);
    } catch (packagemanager.namenotfoundexception e) {
      e.printstacktrace();
    }
    info.metadata.getstring("meta_name");

在application中:

applicationinfo appinfo = null;
    try {
      appinfo = this.getpackagemanager().getapplicationinfo(getpackagename(), packagemanager.get_meta_data);
    } catch (packagemanager.namenotfoundexception e) {
      e.printstacktrace();
    }
    appinfo.metadata.getstring("meta_name");

在service中:

componentname cn = new componentname(this, xxxxservice.class);
    serviceinfo info = null;
    try {
      info = this.getpackagemanager().getserviceinfo(cn, packagemanager.get_meta_data);
    } catch (packagemanager.namenotfoundexception e) {
      e.printstacktrace();
    }
    info.metadata.getstring("meta_name");

在receiver中:

componentname cn = new componentname(getapplicationcontext(), xxxxxreceiver.class);
    activityinfo info = null;
    try {
      info = getapplicationcontext().getpackagemanager().getreceiverinfo(cn, packagemanager.get_meta_data);
    } catch (packagemanager.namenotfoundexception e) {
      e.printstacktrace();
    }
    info.metadata.getstring("meta_name");

2.遇到的问题:获取到值为null

之前在application中获取一直key值,但是一直获取到的都是null,后来人大神说:读取字符串的数值要用info.metadata.getint,尝试了一下,弯的佛,成功拿到,如果是数值类型的,获取值的时候,可以采用:

info.metadata.getint("meta_name"));

替代

info.metadata.getstring("meta_name");

补充知识:android webview拦截替换本地资源,提升加载性能,节省流量

现在许多游戏都是直接提供一个访问地址,然后由webview去访问加载,加载速度的快慢取决于网速,当然也耗流量,这个时候,为了提高产品竞争力,产品经理就会提出需求了,web前端的同学也就会把资源给到android前端,接下来就是要做的处理了,代码不多,用作记录:

package com.dxgame.demo;

import android.net.uri;
import android.os.build;
import android.os.bundle;
import android.support.annotation.requiresapi;
import android.support.v7.app.appcompatactivity;
import android.text.textutils;
import android.util.log;
import android.webkit.mimetypemap;
import android.webkit.webresourcerequest;
import android.webkit.webresourceresponse;
import android.webkit.webview;
import android.webkit.webviewclient;

import java.io.inputstream;
import java.util.hashmap;

public class checklocal extends appcompatactivity {

  private webview webview;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.check_local);
    webview.setwebviewclient(webviewclient);
  }


  //webviewclient主要帮助webview处理各种通知、请求事件
  private webviewclient webviewclient = new webviewclient() {

    @requiresapi(api = build.version_codes.lollipop)
    public webresourceresponse shouldinterceptrequest(webview view, webresourcerequest request) {
      uri uri = request.geturl();
      webresourceresponse response = checklocalwebresourceresponse(uri);
      if (response != null) {
        return response;
      }
      return super.shouldinterceptrequest(view, request);
    }

    @requiresapi(api = build.version_codes.lollipop)
    public webresourceresponse shouldinterceptrequest(webview view, string url) {
      uri uri = uri.parse(url);
      webresourceresponse response = checklocalwebresourceresponse(uri);
      if (response != null) {
        return response;
      }
      return super.shouldinterceptrequest(view, url);
    }
  };

  @requiresapi(api = build.version_codes.lollipop)
  private webresourceresponse checklocalwebresourceresponse(uri uri) {
    webresourceresponse resourceresponse = null;
    string urlstr = uri.tostring();
    log.i("checkurl", urlstr);
    string path = uri.getpath();
    if (!textutils.isempty(path)) {
      path = path.substring(1);
    }
    try {
      inputstream input = getassets().open(path);
      if (input != null) {
        log.i("assetspath", path);
        string mimetype = mimetypemap.getsingleton().getmimetypefromextension(path.substring(path.lastindexof(".") + 1));
        hashmap<string, string> header = new hashmap<>();
        header.put("access-control-allow-origin", "*");
        header.put("access-control-allow-headers", "content-type");
        resourceresponse = new webresourceresponse(mimetype, "", 200, "ok", header, input);
      }
    } catch (exception e) {
      e.printstacktrace();
    }
  }
   return resourceresponse;
}

还可以进一步优化,利用webview的缓存机制,将数据缓存到本地,方法就不列出来了,网上有很多,自行百度

以上这篇android获取清单文件中的meta-data,解决碰到数值为null的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网