• Android下得到已安装Application信息


    在上一篇blog中,谈到如何利用APK archive文件得到相应信息。(当时发现例如ProcessName,DataDir等信息,其实是无法得到的).
    当前咱们看看如何通过系统取得已经安装的Application的相关信息。


    0.基础知识:
    PackageManager class有一个方法:
    public abstract ApplicationInfo getApplicationInfo (String packageName, int flags)
    它向系统查询包名为:PackageName(参数一)的Application信息。注意,与之前 getPackageArchiveInfo()是通过APK Archive文件中main.xml得到信息不通,getApplicationInfo()是向系统查选,所以如果此Application没有被安装,则会返回异常:PackageManager.NameNotFoundException。


    packageName可以通过APK文件得到。


    1. 得到Application相关信息:
    try {
    ApplicationInfo AI = PM.getApplicationInfo(PI.packageName, PackageManager.GET_META_DATA | PackageManager.GET_SHARED_LIBRARY_FILES);


    //dataDir: 分配给此Application的存放数据的位置。通常是:/data/data/packageName/
    Log.w("3DiJoy", "Appliction DataDir:" + AI.dataDir);

    //SourceDir: 安装这个包后的存放位置。 因为APK安装后,会讲archive文件存放在某个目录(一般程序和//root程序位置不同)。 作为读取资源是的位置。此位置通常在/data/app/pakcageName.apk
    Log.w("3DiJoy", "Application SourceDir:" + AI.sourceDir);

    // Application Name: 此处是从main.xml中得到。如果没有,则为空
    Log.w("3DiJoy", "Application Name:" + AI.name);

    // 也是从main.xml中得到。
    Log.w("3DiJoy", String.format("minSDK Version: [%d]", AI.targetSdkVersion));

    //processName. 此Application 运行时的ProcessName. 如果main.xml中有"process" attribute。则为这个值
    //如果没有,则与PackageName相同
    Log.w("3DiJoy", "Application in porcessName is :" + AI.processName);

    //PackageName: 此Application所在的PckageName。
    Log.w("3DiJoy", "Application in Package " + AI.packageName);
    } catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    Log.e("3DiJoy", "This Package not installed");
    e.printStackTrace();
    }


    注意:这里肯定能够得到ProcessName。


    2. 得到Package信息:
    上面只得到了Application系列信息,Package系列信息并为得到,则可以这样处理:
    PackageManager有个方法:
    public abstract PackageInfo getPackageInfo (String packageName, int flags)
    它向系统查询包名为:PackageName(参数一)的PackageInfo信息。
    注意,只有已经安装的Package,才能正常得到信息。否则发生异常。PackageManager.NameNotFoundException。

    因为返回值为PackageInfo。 所以取值与上一blog类似。就不详谈了。

    http://blog.sina.com.cn/s/blog_602f877001017qm2.html

  • 相关阅读:
    减肥 day1
    这两天的学习内容
    小马激活工具激活系统导致系统崩溃
    mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装
    JDK 动态代理实现原理
    php ajax提交post请求出现数组被截断情况的解决方法
    mac OS X下git代码行统计命令
    mac OS X下安装Redis及Thinkphp3.1使用Redis
    linux服务器git pull/push时提示输入账号密码之免除设置
    linux服务器修改ftp默认21端口方法
  • 原文地址:https://www.cnblogs.com/eustoma/p/4059587.html
Copyright © 2020-2023  润新知