先上效果图:

获取手机已安装的App列表利用Android系统API就可以办到,这里为什么要引入RxJava?现在我们假设一下有下面几个需求:

1、我们不需要所有的App,只需要用户安装的第三方App,即过滤到系统App;

2、我们自定义一个AppInfo类,该类中保存了App_Icon、App_Name、App_VersionName等属性,而Android系统提供的API我们之恩那个获取ApplicationInfo,这样就存在一个类型转换;

3、获取Application信息,过滤数据这些操作都是相对耗时的操作,我们需要在工作线程进行操作,获取数据后,我们又需要切换到UI线程进行结果的显示,这又涉及到线程的切换。

基于上面的需求,我们用传统的java代码来实现,相对来说比较麻烦,既然RxJava现在这么火,我们就利用RxJava来实现上面的几个需求。本文所涉及的RxJava操作符主要包括filter、map两个操作符。

一、定义一个AppInfo类,用来保存我们需要显示的信息



二、定义一个Adapter





三、显示页面

显示页面主要是一个RecyclerView列表,用来展示手机中已经安装的App列表。布局什么的就不多说了,直接上代码:



通过getInstalledApp方法,我们可以获取到系统的安装的应用的PackageInfo,在getAllApp刚发中,通过subscriber.onNext(info)发送PackageInfo;由于PackageInfo中包含了所有的App信息,而这并不是我们需要的,我们只需要用户安装的App就可以,这样就要求过滤掉系统App,RxJava提供了一个filter操作符来进行过滤操作,通过map操作我们就可以把系统应用过滤掉;另外,我们需要将获得的PackageInfo转换为我们定义的AppInfo类型,而RxJava只需要一个map操作符就能完成转换,这样就可以把获取的App信息保存到AppInfo类中。

通过上面的过滤和变换之后,我们就可以得到AppInfo,然后在onNext方法中通过mData.add(appInfo)把结果添加进List集合中,onCompleted方法中通知Adapter进行更新mAdapter.notifyDataSetChanged()。

看似复杂的一系列需求,得益于RxJava优秀API设计,使得数据的过滤、变换等操作变得十分简单,同时RxJava的流式API设计,即使我们的逻辑很复杂的情况下,RxJava能够依然保持我们代码逻辑的简洁和易懂。

利用RxJava获取手机已安装的App的图片、应用名称和版本号的更多相关文章

  1. 获取手机已安装应用的name,bundleIdentitifer

    获取手机已安装应用的name,bundleIdentitifer Class c =NSClassFromString(@"LSApplicationWorkspace"); id ...

  2. iOS11 获取手机已安装应用列表

    在iOS 11 以前我们可以使用LSApplicationWorkspace来获取手机上已安装的应用列表 iOS 11 上获取所有已安装应用接口被禁,但可以根据BundleId检查App是否存在 - ...

  3. 从”茄子快传”看应用程序怎样获取手机已安装程序的apk文件

    "茄子快传"是联想开发的一款近距离文件共享软件.它通过wifi-direct(速度飞快,不须要联网)或者普通的网络(速度慢)在不同手机间传递文件. 不知为何.它就火了起来,火的也飞 ...

  4. iOS获取已安装的app列表(私有库)+ 通过包名打开应用

    1.获取已安装的app列表 - (void)touss { Class lsawsc = objc_getClass("LSApplicationWorkspace"); NSOb ...

  5. 从Android手机中取出已安装的app包,导出apk

    从Android手机中取出已安装的app包,导出apk TAG:Android,提取,apk,adb,pm,root,导出apk 假设有这样一个场景,A君看到你手机上一个实用APP,想要安装到自己手机 ...

  6. android检测手机是否安装某个app

    public static boolean isAvilible(Context context, String packageName){ //获取packagemanager final Pack ...

  7. Android中获取系统上安装的APP信息

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003259 Android中获取系统上安装的APP信 ...

  8. 如何用js检测手机是否安装某个app

    问题描述 如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场 解决方案 一 //html代码中 的 a 标签,以微信为例,默认的是调用weixin schem ...

  9. HTML中判断手机是否安装某APP,跳转或下载该应用

    有些时候在做前端输出的时候,需要和app的做些对接工作.就是在手机浏览器中下载某app时,能判断该用户是否安装了该应用.如果安装了该应用,就直接打开该应用:如果没有安装该应用,就下载该应用.那么下面就 ...

随机推荐

  1. 基于jQuery的一个简单的图片查看器

    项目中自己diy了一个图片查看器.因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮.等以后有时间了在重写一下样式和封装,作为备用的只是积累吧.如果有童鞋有用到,完全可以在此基础上改,比较容易 ...

  2. HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...

  3. winform简单打印

    首先新建一个winform 添加winform中自带的打印控件 winform中有默认的打印控件 1.按图片内容将控件拖拽到form中! 2.然后将pageSetupDialog1,printDial ...

  4. ASP.NET MVC 使用Jquery Uploadify 在非IE浏览器下Http Error的解决方案

    解决Uploadify上传控件在非IE浏览器中不工作,需要做如下2步修改: 1.Global.asax文件中,实现Application_BeginRequest函数: void Applicatio ...

  5. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  6. 孙鑫MFC学习笔记9:状态栏与工具栏编程

    1.在窗口创建之前就应该修改窗口的样式 2.单文档应用程序会把文档名作为应用程序标题,应该去掉FWS_ADDTOTITLE属性,然后修改lpszName为标题 3.在窗口创建完成后,可以通过SetWi ...

  7. django pdb

    import pdb; pdb.set_trace()   http://charlee.li/debug-djangp-with-pdb.html https://github.com/tomchr ...

  8. Redis数据库安装简介

    方法一:Redis手动cmd启动服务 端客户端的方法-------Redis 服务端测试使用1. 下载Redis(https://github.com/mythz/redis-windows)2. 解 ...

  9. 用Apache 里面的ab做一个简单的压力测试

    我用的是xampp环境包. D:\xampp\apache\bin 进入这路径, 找到ab.exe  尝试双击打开ab.exe 但不能如愿, 这两个都是一个压力的测试软件, 是apache自带的; 好 ...

  10. Oracle to_char()函数的使用细则

    Oracle to_char()函数的使用细则,学习连接 http://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html