程序卸载器

程序卸载器是很常见的系统管理应用,很多应用管理软件也内置了这个功能。其实功能实现起来非常简单,只需要调用系统的应用卸载服务即可。应用运行界面如下:

系统运行效果

卸载应用关键代码

卸载应用需要得到应用的包名,使用Intent传递给Android系统的应用卸载服务,源码如下:

 Uri uri = Uri.parse("package:" + packageName);
    Intent intent = new Intent(Intent.ACTION_DELETE, uri);MainActivity.this.startActivity(intent);

获取应用信息关键代码

卸载应用是需得到应用的包名,获取应用的包名可以使用PackageManager。实现的关键代码如下:

 PackageManager pm = context.getPackageManager();List<PackageInfo> list = pm.getInstalledPackages(0);for (PackageInfo packageInfo : list) {// 只加载非系统应用if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {AppInfo i = new AppInfo();i.setPackageName(packageInfo.packageName);i.setAppName(pm.getApplicationLabel(packageInfo.applicationInfo)                                       .toString());// 在API 9 (2.3)中加入// i.setFirstInstallTime(packageInfo.firstInstallTime);i.setFirstInstallTime(new File(packageInfo.applicationInfo.sourceDir).lastModified());i.setIcon(pm.getApplicationIcon(packageInfo.applicationInfo));i.setVersionCode(packageInfo.versionCode);appList.add(i);} else {Log.v(TAG, "忽略系统应用");}
    }

这段代码中使用PackageManager获得已安装的应用PackageInfo信息列表,使用PackageInfo封装的信息即可得到应用的全部信息,如packageInfo.firstInstallTime等字段在高版本API中加入,使用中需要注意。这个实例忽略掉了系统自带应用。

因为获取系统应用信息列表可能需要较多时间操作,所以最好在子线程中执行。

列表排序比较器

得到的应用列表,为了方便用户查找,应该按照应用名优先排序。Collections工具类提供了sort方法,为了排序自定义元素,需要自定义Comparator的实现类。源代码如下:

package com.frank.appsmanager;import java.util.Comparator;public class AppInfoComparator implements Comparator<AppInfo> {@Overridepublic int compare(AppInfo lhs, AppInfo rhs) {if (!lhs.getAppName().equals(rhs.getAppName())) {return lhs.getAppName().compareTo(rhs.getAppName());} else {return lhs.getPackageName().compareTo(rhs.getPackageName());}}}

图标大小处理

不同应用得到的图标大小不同,所以需要对列表中的图标的大小进行重新调整。代码如下:

package com.frank.appsmanager;import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;public class DrawableUtil {public static Bitmap drawableToBitmap(Drawable drawable) {Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());drawable.draw(canvas);return bitmap;}
}

调用位置:

 // 匹配不同应用icon的大小int size = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth() / 6;Bitmap iconBitmap = Bitmap.createScaledBitmap(DrawableUtil.drawableToBitmap(i.getIcon()), size, size, true);holder.iv_icon.setImageBitmap(iconBitmap);

全部代码

完整应用源代码可通过以下链接下载:

http://download.csdn.net/detail/f40346839100/6886407

Android应用卸载器相关推荐

  1. android使用es文件管理器,功能强大的 Android ES文件管理器 v4.1.9.9.31 内部版

    亲,我能问你一个问题吗?你知道安卓文件管理是谁会在百度上说自己是第一品牌吗? 于是我百度了一下[文件浏览器],发现了一个不要脸的东西!如图,不信的自己是搜索!对于这种软件是我没有好感的,这世界还会有人 ...

  2. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放

    前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over1 ...

  3. 多媒体课程设计android,基于Android的多媒体播放器(课程设计)报告.doc

    基于Android的多媒体播放器(课程设计)报告 基于Android的多媒体播放器课程设计报告 (2014-01-02 22:46:52) HYPERLINK "javascript:;&q ...

  4. Android登录拦截器实现方式(一)

    Android登录拦截器实现方式(一) 2015-08-04 22:12:01 标签:Android登录 拦截器 Interceptor 对于App端来说,如果能保证用户在登录后能自动延续登录前的操作 ...

  5. android应用课程设计报告,基于Android的多媒体播放器课程设计报告.doc

    基于Android的多媒体播放器课程设计报告.doc 基于Android的多媒体播放器课程设计报告2014-01-02 224652 转载标签 android多媒体播放器嵌入式课程设计报告it分类 我 ...

  6. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  7. 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc

    android音乐播放器课程设计报告 android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓 ...

  8. Vitamio打造自己的Android万能播放器

    前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...

  9. Android Gradle查询器

    Android Gradle查询器 Gradle please 官网:http://gradleplease.appspot.com/ Gradle please是一个在线工具,它能帮助你找到Grad ...

最新文章

  1. SQL 全角半角转换-(摘抄)
  2. 磁盘 io 的性能指标 简介
  3. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170327
  4. HTML和Jsp 页面使用 shiro标签备忘录
  5. java查找pdf关键字_java实现查找PDF关键字所在页码及其坐标
  6. Java 最佳学习途径
  7. clover删除多余引导_clover如何删除无用启动项_常见问题解析,clover
  8. CF 1720 D1. Xor-Subsequence (easy version) dp 1800
  9. Web前端作业:Html+JS实现的图片镜像、黑白、红色、绿色、蓝色及还原
  10. 【C语言】通讯录——源代码
  11. linux 查看磁盘信息
  12. csu1335 高桥与低桥
  13. 最近16款免费的Wordpress主题
  14. 阿里云国际站云服务器ECS自助搭建网站
  15. 你关注过黑产、羊毛党吗?用户增长的另一面
  16. 零基础如何学习网络安全
  17. 电脑回收站清空了如何找回重要文件?
  18. 阿里巴巴系统架构首次曝光
  19. solr 高并发_6岁男童入学体检,却查出重病|手术|骨髓|性疾病|并发症|豪豪
  20. labview脉搏波脑电心电心音信号分析

热门文章

  1. photoshop里上色之后,颜色总是灰色的,解决办法
  2. 使用思维宫殿记忆TCP分层结构
  3. Python 设计签名
  4. Qt 播放语音 QTextToSpeech
  5. STDIN_FILENO 与stdin的区别
  6. FPGA上电后IO默认状态
  7. C++字符串——斯诺登的密码
  8. 【0元试用微软 Azure人工智能认知服务】我做了个群聊天机器人
  9. 2022软工第06组第五次博客作业
  10. 企业邮箱远程企业邮箱主机关闭了一个现有的连接