Android中对已安装应用的管理实现
获取、管理手机中已安装的所有应用信息
1、创建应用的实体类AppInfo,属性有应用的名称、包名、图标、第一次安装时间和版本名称
public class AppInfo {
private String name ;//应用名称
private String packageName ;//应用包名
private Drawable icon ;//应用图标
private long firstInstallTime ;//应用第一次安装的时间
private String versionName ;//应用的版本名称
public String getName() {
return name;
}
public String getPackageName() {
return packageName;
}
public Drawable getIcon() {
return icon;
}
public long getFirstInstallTime() {
return firstInstallTime;
}
public String getVersionName() {
return versionName;
}
public AppInfo(String name, String packageName, Drawable icon, long firstInstallTime, String versionName) {
this.name = name;
this.packageName = packageName;
this.icon = icon;
this.firstInstallTime = firstInstallTime;
this.versionName = versionName;
}
}
2、获取所有应用信息的方法
public static List<AppInfo> getAppInfos(Context context){
List<AppInfo> appInfoList = new ArrayList<>() ;
//获取包管理器
PackageManager pm = context.getPackageManager();
//获取已安装的包信息
List<PackageInfo> packageInfos = pm.getInstalledPackages(0);
for(PackageInfo packageInfo : packageInfos){
//获取包名
String packageName = packageInfo.packageName;
//获取应用图标
Drawable icon = packageInfo.applicationInfo.loadIcon(pm);
//获取应用的名称
String name = packageInfo.applicationInfo.loadLabel(pm).toString();
//获取第一次安装的时间
long firstInstallTime = packageInfo.firstInstallTime;
//获取版本号
int versionCode = packageInfo.versionCode;
//获取版本名称
String versionName = packageInfo.versionName;
AppInfo appInfo = new AppInfo(name,packageName,icon,firstInstallTime,versionName);
appInfoList.add(appInfo);
}
return appInfoList ;
}
3、打开应用方法
public static void openApplication(Context context,String packageName) {
Intent intent=isexit(context,packageName);
if(intent==null){
System.out.println("APP not found!....:"+packageName);
}
context.startActivity(intent);
}
/**
* 通过packagename判断应用是否安装
* @param context
*
* @return 跳转的应用主activity Intent
* */
public static Intent isexit(Context context,String pk_name){
//获取包管理器
PackageManager packageManager = context.getPackageManager();
//通过包名获取Intent
Intent it= packageManager.getLaunchIntentForPackage(pk_name);
return it;
}
4、进入应用详情页面
public static void showInstalledAppDetails(Context context, String packageName) {
Intent intent = new Intent();
final int apiLevel = Build.VERSION.SDK_INT;
if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", packageName, null);
intent.setData(uri);
} else { // 2.3以下,使用非公开的接口(查看InstalledAppDetails源码)
// 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。
final String appPkgName = (apiLevel == 8 ? "pkg"
: "com.android.settings.ApplicationPkgName");
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
intent.putExtra(appPkgName, packageName);
}
context.startActivity(intent);
}
5、卸载应用
public static void uninstallApplication(Context context,String packageName){
Intent intent = new Intent() ;
intent.setAction("android.intent.action.DELETE");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:"+packageName));
context.startActivity(intent);
}
Android中对已安装应用的管理实现的更多相关文章
- 从Android手机中取出已安装的app包,导出apk
从Android手机中取出已安装的app包,导出apk TAG:Android,提取,apk,adb,pm,root,导出apk 假设有这样一个场景,A君看到你手机上一个实用APP,想要安装到自己手机 ...
- ubuntu中查看已安装软件包的方法
ubuntu中查看已安装软件包的方法: 方法一:在新立得软件包管理器中,打到已安装,便可以看看有多少包被安装. 如果想把这些包的信息复制到一文件里,可用下面的方法. 方法二:在终端输入 sudo dp ...
- Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
http://blog.csdn.net/dyllove98/article/details/8830264 如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步 ...
- 实际操作中遇到的问题--Django中查看已安装的包的相关命令
pip freeze --------查看已经安装的包 pip uninstall 安装包名 ---------卸载已安装的包 pip install 安装包名--------安装包
- 命令行从Android手机中导出已安装APK的方法调研
一.背景 二.步骤 一.背景 很多时候,APK文件只存在于应用市场,在PC上无法直接下载.用手机下载下来后就直接安装了,也不能保存原始的APK文件. APK安装到手机后,Android系统会保存一份和 ...
- Android 指定调用已安装的某个“相机”App
在做项目时,有这样一个需求:如果我的手机中安装了四个相机软件,那么,在调用系统相机的时候,这四个相机软件都会被列出来,但是其中的两个在拍照完后并不能将拍得的照片返回给我,因此,能不能指定开启一个我已知 ...
- Android中下载、安装和卸载(原)
应用场景:在检查版本更新的时候经常需要从服务器端下载然后安装到手机中 使用工具: XUtils,这个开源的框架真的是需要花大把时间去阅读和理解的,十分有用的,on the way ! fighting ...
- centOS7中Mariadb数据库安装与基本管理
一.Mariadb数据库安装 1. 直接yum源安装 yum -y install mariadb mariadb-serversystemctl start mariadb /启动Mariadb服务 ...
- 我的Android进阶之旅------>Android中adb install 安装错误常见列表
adb的安装过程分为传输与安装两步. 在出错后,adb会报告错误信息,但是信息可能只是一个代号,需要自己定位分析出错的原因. 下面是从网上找到的几种常见的错误及解决方法: 1.INSTALL_FAIL ...
随机推荐
- oracle的事务级别
ooracle的事务级别是不提交的,如果在sql语句中插入数据,如果不提交(commit).在程序里面试读不出来数据的.长时间不用oracle竟然忘了这些东西,特此记下.方便以后查看
- Struts2中的值栈
一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...
- mysql中如何处理字符
concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结 ...
- 理解矩阵与线性代数<转>
作者:张帅链接:https://www.zhihu.com/question/21082351/answer/34361293来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- c/c++(hiredis)异步调用redis【转】
hiredis是redis官方推荐的C/C++客户端代码库.使用hiredis库很简易方便的进行redis的相关开发. 同步方式 不过大多数情况下,我们采用的都是同步的调用方式. 1 2 3 4 ...
- 一起来读Netty In Action(一)
Netty是一款异步事件驱动的网络应用程序框架,支持快速的开发可维护的高性能的面向协议的服务器和客户端.在网络编程中,阻塞.非阻塞.同步.异步经常被提到.同步(synchronous) IO和异步(a ...
- 用react重构个人网站 3-23
1: :before 选择器在被选元素的内容前面插入内容 2: float是什么?浮动在CSS中的作用 3:CSS运用在React中的两种方式 使用className属性,CSS内容就用link加 ...
- Spring IOC知识点一网打尽!
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工厂模式,总 ...
- Selenium 指定浏览器位置
在脚本开头要指定浏览器位置. public static void main(String[] args) throws InterruptedException, IOException { Sys ...
- Mac下安装git
gti下载地址 https://git-scm.com/downloads 一步一步来就完事了.安装完以后执行 git version 查看是否更新到了该版本