监听Google Player下载并获取包名等信息
一、解决思路
通过监听ContentObserver监听下载路径content://downloads
二、具体步骤
1 设置监听器
    context.getContentResolver()
        .registerContentObserver(Uri.parse("content://downloads"), true, new ContentObserver() {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                super.onChange(selfChange, uri);
                parseData(uri);
            }
        });
2 数据解析
- Uri过滤
    private void parseData(Uri uri) {
        List<String> segments = uri.getPathSegments();
        if (segments != null && segments.size() > 1) {
            String segment = (String) segments.get(1);
            synchronized (this.pathSegments) {
                if (this.pathSegments.contains(segment)) {
                    return;
                }
                this.pathSegments.add(segment);
            }
            obtainAppInfo(segment);
        }
    }
- 应用信息获取:
    private void obtainAppInfo(String segment){
        ...
        cursor = queryDownloadPkg(segment);
        if (cursor == null || cursor.getColumnCount() < 15) {
            return;
        }
        cursor.moveToNext();
        String marketName = cursor.getString(9); // 应用市场包名
        String appLink = cursor.getString(15); // 下载应用的包名链接
        String appName = cursor.getString(20); //获取应用名称
        ...
    }
    private Cursor queryDownloadPkg(String segment) {
        return this.context.getContentResolver()
                .query(Uri.parse("content://downloads/public_downloads/" + segment),
                        (String[]) null, (String) null, (String[]) null, (String) null);
    }
监听Google Player下载并获取包名等信息的更多相关文章
- Android Apk获取包名和Activity名称
		一.使用aapt(Android Asset Packaging Tool)工具获取: 1.配置Android环境: a.添加build-tools/android路径到系统环境变量的中Path中,注 ... 
- 二.第一个自动化demo,打开APP-如何获取包名和activity。(真机)
		环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity 启动一个app,我们需要知道它的平台.版本号. ... 
- 【Monkey】Monkey获取包名的方式
		获取包名的方式: 1.有源码:查看AndroidManifest.xml 2.只有apk: 2.1 aapt dump xmltree ColaBox.apk AndroidManifest.xml ... 
- Android 获取包名,版本信息
		Android 获取包名,版本信息及VersionName名称 <span style="font-size: 14px;">private String ge ... 
- 手机App测试如何获取包名的入口【两种方式】
		在进行手机APP测试的时候经常要获取包名.那么何为包名呢?简单来说其实就是手机APP的安装apk文件的名称,每个手机APP(软件)的包名都是唯一的. 那么我们怎样来获取包名以及包名的入口呢? 方法一: ... 
- Appium Android 获取包名和 Activity 的几种方法 (转)
		本文档主要记录“获取包名和 Activity 的方法”,用于自动化测试时启动APP.以下方法主要来源于网络和社区同学的贡献,特此感谢! 1. 方法一: pm list package查看包名 adb ... 
- APP自动化测试获取包名的两种方法
		获取包名的两种方法: 一.通过aapt获取 1.进入aapt.exe所在路径 2.在地址栏输入cmd回车,打开dos命令窗口. 3.在命令窗口输入 aapt dump badging 拖入apk 回车 ... 
- Monkey通过安装包获取包名
		在monkey命令中,包名常作为一个参数.但我们经常知道apk文件,却不知道包名. 如何获取包名呢? 方法一:AAPT 在SDK的build-tools目录下,aapt工具可以查看,创建,更新zip格 ... 
- 纯java从apk文件里获取包名、版本号、icon
		简洁:不超过5个java文件 依赖:仅依赖aapt.exe 支持:仅限windows 功能:用纯java获取apk文集里的包名,版本号,图标文件[可获取到流直接保存到文件系统] 原理:比较上一篇文章里 ... 
随机推荐
- Gerrit安装配置
			环境: CentOS 1611 + gerrit-2.11.4 (review.openstack.org) 1. 安装java1.8 (>1.7) [root@review ~]# yum i ... 
- 详细透彻解读Git与SVN的区别(集中式VS分布式)
			Git是目前世界上最先进的分布式版本控制系统,其实 Git 跟 SVN一样有自己的集中式版本库或服务器,但是Git 更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect ou ... 
- 《C++ Primer Plus》读书笔记之八—对象和类
			第十章 对象和类 1.面向对象编程(OOP)的特性:抽象.封装和数据隐藏.多态.继承.代码的重用性. 2.指定基本类型完成了3项工作:①决定数据对象需要的内存数量.②决定如何解释内存中的位(lon ... 
- 【1】python-正则表达式语法规范与案例
			正则表达式的用法与案例分析 2018-08-24 21:26:14 [说明]:该文主要为了随后复习和使用备查,由于做了word文档笔记,所以此处博文没有怎么排版,没放代码,以插入图片为主, 一.正则表 ... 
- HBase搭建部署
			基础环境准备 zookeeper集群(参开地址:https://www.cnblogs.com/starzy/p/10376642.html) Hadoop集群(参考地址:https://www.cn ... 
- codeforces 933D A Creative Cutout
			题目链接 正解:组合数学. 充满套路与细节的一道题.. 首先我们显然要考虑每个点的贡献(我就不信你能把$f$给筛出来 那么对于一个点$(x,y)$,我们设$L=x^{2}+y^{2}$,那么它的贡献就 ... 
- openresty + orange centos7 安装
			Orange Orange是一个基于OpenResty的API网关.除Nginx的基本功能外,它还可用于API监控.访问控制(鉴权.WAF).流量筛选.访问限速.AB测试.动态分流等.它有以下特性: ... 
- 【node.js】Express 框架
			Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ... 
- 20145203盖泽双 《Java程序设计》第9周学习总结
			20145203盖泽双 <Java程序设计>第9周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的:让Java程序设 ... 
- JPA条件查询时间区间用LocalDateTime的问题
			@Override public Page<Order> findAll(String outTradeNo, String tradeNo, String mchAppid, Strin ... 
