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
Android下得到已安装Application信息的更多相关文章
- <转> win7下破解已安装的VS2008
http://renfan.blog.51cto.com/3466724/754301 在win7系统下,已安装的VS2008维护界面是不显示序列号输入的,需要按以下步骤进行才能破解 1.点击“卸载/ ...
- ubuntu查看已安装软件包信息的方法
ubuntu查看已安装软件包信息的方法原创fang141x 最后发布于2019-04-15 10:41:34 阅读数 2802 收藏展开简介ubuntu下面是使用dpkg来管理和安装软件包的,对应ce ...
- Android 下得到 未安装APK包含信息 等
很多情况下,我们需要通过APK文件来得到它的一些信息. (此时此APK不一定被安装了) 0. 基础知识:可以通过android.content.Context的方法 getPackageManager ...
- Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
http://blog.csdn.net/dyllove98/article/details/8830264 如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步 ...
- Android中对已安装应用的管理实现
获取.管理手机中已安装的所有应用信息 1.创建应用的实体类AppInfo,属性有应用的名称.包名.图标.第一次安装时间和版本名称 public class AppInfo { private Stri ...
- Ubuntu 下查看已安装的软件
Ubuntu 下如何查看已安装的软件 1.查看安装的所有软件 dpkg -l 例如: dpkg -l | grep ftp 2.查看软件安装的路径 dpkg -L | grep ftp 也可以用 wh ...
- Mac下查看已安装的jdk版本及其安装目录
1.打开终端,输入:/usr/libexec/java_home -V 注意:输入命令参数区分大小写(-v是不对的,必须是-V) 2.如图:为输入命令: 当前Mac已安装jdk目录: Mac默认使用的 ...
- [android]android下apk的安装过程
/********************2016年4月23日更新********************************/ 知乎:有什么apk分析工具? 拿到了一个apk文件,怀疑不安全,在 ...
- linux下查看已安装的软件与卸载
转自:https://blog.csdn.net/qq_22075041/article/details/78855849 因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否 ...
随机推荐
- poj 2488 A Knight's Journey( dfs )
题目:http://poj.org/problem?id=2488 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. #include <io ...
- MySQL open table
背景: MySQL经常会遇到Too many open files,MySQL上的open_files_limit和OS层面上设置的open file limit有什么关系? 源码中也会看到不同 ...
- 记一次SSH登陆失败问题的定位
创建用户之后,使用ssh协议登陆提示失败. useradd -d /home/hdp -m hdp -g dba -s /bin/bash 通过命令 ssh -v hdp@127.0.0.1 登陆,查 ...
- bzoj2595
一开始看是插头dp,后来发现还有一个叫斯坦纳树的东西 什么叫斯坦纳树,就是使给定点连通开销和最小的树(可以包含多余的点) 到这张平面图上,我们不难想到用dp来解决,设f[x,y,S]表示连通集合为S, ...
- 在QuickReport中实现多栏打印
如果在Treport的DataSet属性中选定一个Table,那么QuickReport每次打印详细列表(BandType=rbDetail)属性的TQRBand时,系统会自动取出一个记录供打印, ...
- Vs 引用第三方DLL文件 版本不一致问题 (npoi与memcached中的ICSharpCode.SharpZipLib版本冲突的解决方案)
最近在 做 MailChimp 与网站功能 集成时,发现 MailChimp 2API 中的 MailChimp.dll 中的依赖项 SerivceStack.Text.dll (版本为3.9.71 ...
- (十一)学习CSS之float属性
参考:http://www.w3school.com.cn/cssref/pr_class_float.asp 定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕 ...
- HDU 3586-Information Disturbing(树形dp)
题意: n个节点的通信连接树,切断每个边有一定的花费,要你切断边,在总花费不超过m的前提,使所有的其他节点都不能和节点1(根)连通,切边时有花费上限,让你最小化这个上限. 分析:最小化最大值,想到二分 ...
- Git 基础 - Git Aliases
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global ...
- devexpress 中Grid 的使用:为零不显示
如果要让为0的列不显示: this.gridColumn_FAmount.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; ...