Android菜鸟笔记- 获取未安装的APK图标、版本号、包名、名称、是否安装、安装、打开
周末闲来无事,把Android的基础知识拿出来复习复习,今天主题是《获取未安装的APK图标、版本号、包名、名称、是否安装、跳转安装、打开》
一、获取APK图标
通常读取APK的图标能够用,PackageManager里面的getApplicationIcon(ApplicationInfo)来得到一个drawable。但实际使用的时候常常仅仅能得到一个默认的图标。根本不是APK的图标。
參考小米开源文件管理器,结合实践,代码例如以下:
/*
* 採用了新的办法获取APK图标。之前的失败是由于android中存在的一个BUG,通过
* appInfo.publicSourceDir = apkPath;来修正这个问题,详情參见:
* http://code.google.com/p/android/issues/detail?id=9151
*/
public static Drawable getApkIcon(Context context, String apkPath) {
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(apkPath,
PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
appInfo.sourceDir = apkPath;
appInfo.publicSourceDir = apkPath;
try {
return appInfo.loadIcon(pm);
} catch (OutOfMemoryError e) {
Log.e("ApkIconLoader", e.toString());
}
}
return null;
}
下面代码段中PackageManager、PackageInfo、ApplicationInfo均同上面一致。
二、获取APK名称
String label = appInfo.loadLabel(mPackManager).toString();
三、获取APK包名
String packageName = appInfo.packageName;
四、获取APK版本号
String version = info.versionName==null? "0":info.versionName
五、推断APK是否安装
private boolean isApkInstalled(String packagename)
{
PackageManager localPackageManager = getPackageManager();
try
{
PackageInfo localPackageInfo = localPackageManager.getPackageInfo(packagename, PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
}
catch (PackageManager.NameNotFoundException localNameNotFoundException)
{
return false;
} }
六、安装APK
private void installAPK(String apkPath)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + apkPath),
"application/vnd.android.package-archive");
mContext.startActivity(intent);
}
七、打开APK
</pre><pre name="code" class="java"> private void openAPK(String packagename)
{
PackageManager packageManager = mContext.getPackageManager();
Intent intent=new Intent();
intent =packageManager.getLaunchIntentForPackage(packagename);
mContext.startActivity(intent);
}
Ps.关于APK的静默安装还在研究中...
Android菜鸟笔记- 获取未安装的APK图标、版本号、包名、名称、是否安装、安装、打开的更多相关文章
- Android反编译(未混淆的apk)
Android反编译(未混淆的apk) 工具 dex2jar 下载地址:我的CSDN 或者 官网 jd-gui 下载地址:我的CSDN 或者 官网 反编译步骤 1. 将APK解压缩,获取classes ...
- apk签名、包名
//通过各手机管理软件,如如360.豌豆荚等查看 //使用命令行,可以查看到permission.packagename.title.versionCode等 aapt dump badging ~/ ...
- 通过PHP怎样取到android系统下apk应用的包名,版本号等信息
公司项目关系,要求在通过PHP解析android系统应用apk包内的一切可用的信息.比如说:APK包名,版本号,版本名,安装权限等一系列关于对应包的信息.通过google查找相关的解决方案,都没有找到 ...
- c# 获取 Apk ,Aar 文件包名
最近项目有个需求,需要拿到前端上传的Apk或者Aar文件里面的包名. 在这里贡献出来,方便有需求的小伙伴. 项目是 asp.net core 2.2 需要安装 nuget : AndroidXml S ...
- Android学习笔记--获取传感器信息
相关资料: 传感器的坐标与读数:http://www.cnblogs.com/mengdd/archive/2013/05/19/3086781.html 传感器介绍及指南针原理:http://www ...
- Android 学习笔记---获取RadioGroup的选定值
1,获取RadioGroup控件: RadioGroup radioGroup = (RadioGroup)findViewById(R.id.myRadioGroup); 2,获取RadioButt ...
- [Android学习笔记]获取view的尺寸和坐标
对于UI方面很多时候需要获取它的很多信息,具体情况见view的文档 View文档 http://developer.android.com/training/index.html 常用方法:获取vie ...
- Android学习笔记-获取手机内存,SD卡存储空间。
前面介绍到如何保存数据到手机内存或者SD卡,但是问题是,在保存以前,我们还需要对他们的空间(可用空间),进行判断,才可以进行后续操作,所以,本节我们就介绍如何获取手机内存以及Sd卡的空间. //这时获 ...
- android 开发 system/app目录下面有多个重复包名的apk,会不会冲突
环境:已经拥有了root权限的android系统,我们的apk是开机启动 测试:将2个相同的版本拷贝到系统system/app目录下面 adb root #获取root权限,前提是已经开放了root权 ...
随机推荐
- Constructing Roads --hdoj
Constructing Roads Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- [SCOI 2003] 字符串折叠
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1090 [算法] 区间DP [代码] #include<bits/stdc++. ...
- How to read a paper efficiently
How to read a paper efficiently Structure of a Journal a Journal Article Title Keywords Abstract Int ...
- jupyter在特定环境特定目录中启动
代码如下: @echo off start %windir%\System32\cmd.exe "/c" D:\Anaconda\Scripts\activate.bat # 启动 ...
- Qt5.9 WebEngine 概述
Qt WebEngine模块提供了一个web浏览器, 在不使用本地浏览器的情况下, 它可以很容易地把Web内容嵌入到Qt应用程序中. Qt WebEngine为渲染HTML, XHTML和SVG文档, ...
- ubuntu16.04 下载 fabric
1 Fabric源码下载 我们可以使用Git命令下载源码,也可以使用go get命令,偷懒一点,我们直接用go get命令获取最新的Fabric源码: go get github.com/hyperl ...
- RocketMQ之消息中间件需要解决的问题
消息中间件需要解决哪些问题 1.Publish/Subscribe(发布订阅) 发布订阅是消息中间件最基本的功能 2.Message Priority(消息优先级) 在消息队列中,每条消息都有不同的优 ...
- 集成Bmob推送
Write By lz: 转发请注明原文地址: http://www.cnblogs.com/lizhilin2016/p/6952217.html Lz 寄语: Bmob 奇葩推送, 大坑, 想要 ...
- [转]Git入门与实践(一)
git入门与实践(一) · March 10th, 2010 · Posted in UNIX环境编程 · By ghosTM55 Write comment ...
- caffe学习笔记--跑个SampleCode
Caffe默认情况会安装在CAFFERROOT,就是解压到那个目录,例如: home/username/caffe-master, 所以下面的工作,默认已经切换到了该工作目录.下面的工作主要是,用于测 ...