系列文章目录



文章目录

  • 系列文章目录
  • 前言
  • 一、DataCapture
  • 1.通讯录集合数据
  • 2.应用列表集合数据
  • 3.日历事件信息数据
  • 4.电量信息数据
  • 5.sms短信信息数据
  • 6.照片集合信息数据
  • 7.传感器信息数据
  • 8.wifi信息数据
  • 8.1 wifi详情
  • 9.硬件信息数据
  • 10.定位信息数据
  • 11.其他信息数据
  • 二、使用步骤
  • 1.引入库
  • 2.获取数据方法,目前因数据量庞大,暂推荐手动在子线程调用
  • 3.关于权限,待更新
  • 总结



前言

基于最近刚完结的外包项目功能——数据抓取,通过调用api和内容提供器来获取手机设备各种数据,诸如SMS短信数据、电量数据、手机应用数据等等,我尝试开发了一个开源库,希望能够帮助到大家来实现这个功能。

习惯性上图展示:

直接读取android 手机 读取安卓手机数据_直接读取android 手机

一、DataCapture

对手机设备的信息数据抓取,目前支持在子线程抓取数据,因为有些数据量过于庞大会阻塞线程,可抓取数据有:

1.通讯录集合数据

字段名

详情

contact_display_name

联系人名称

last_time_contacted

上次通讯时间(毫秒)

number

联系人手机号

times_contacted

联系次数

up_time

编辑时间(毫秒))

type

通话类型

2.应用列表集合数据

字段名

详情

app_name

APP名称

app_type

是否系统app 0:非系统app 1:系统app

app_version

APP版本

in_time

安装时间(毫秒)

obtain_time

数据抓取时间(秒))

package_name

包名

up_time

更新时间 (毫秒)

version_code

版本号

3.日历事件信息数据

字段名

详情

description

事件描述

end_time

事件结束时间(毫秒)

event_id

事件ID

event_title

事件标题

start_time

事件开始时间(毫秒))

reminders

提醒列表

4.电量信息数据

字段名

详情

battery_level

电池电量

battery_max

电池容量

battery_pct

电池百分比

battery_state

电池状态 充电0 不充电1

is_ac_charge

是否交流充电(1:yes,0:no)

is_charging

是否正在充电

is_usb_charge

是否USB充电(1:yes,0:no)

5.sms短信信息数据

字段名

详情

content

短信消息体

other_phone

收件⼈/发件⼈⼿机号

package_name

包名

read

短信状态 0-未读,1-已读

seen

短信是否被用户看到 0-尚未查看,1-已查看

status

短信状态:-1表示接收,0-complete,64-pending,128-failed

subject

短信主题

time

收到短信的时间戳(毫秒),long型

type

短信类型:1-接收短信,2-已发出短信

6.照片集合信息数据

字段名

详情

addTime

添加数据库时间(保存)

author

照片作者

createTime

照片读取时间(毫秒数时间戳),即当前时间

date

拍照时间(毫秒数时间戳)

flash

闪光灯

focal_length

镜头的实际焦距

gps_altitude

海拔高度

gps_processing_method

定位的方法名称

height

照片高度

latitude

照片拍摄时的经度

lens_make

镜头制造商

lens_model

镜头的序列号

longitude

照片拍摄时的纬度

model

拍照机型

name

照片名称

orientation

照片方向

save_time

照片修改时间

software

生成图像的相机或图像输入设备的软件或固件的名称和版本

take_time

创建时间(毫秒数时间戳)

updateTime

编辑时间

width

照片宽度

x_resolution

X方向上每个分辨率的像素数

y_resolution

Y方向上每个分辨率的像素数

7.传感器信息数据

字段名

详情

id

传感器id,0不支持功能,-1即其类型和名称的组合在系统中唯一标识。-2获取不到

maxRange

传感器单元中传感器的最大量程

minDelay

两个事件之间允许的最小延迟(以微秒为单位),如果此传感器仅在其测量的数据发生变化时返回值,则为零

name

传感器名称

power

使用时功率

resolution

传感器单元中传感器的分辨率

type

该传感器的通用类型

name

传感器名称

vendor

厂商字符串

version

版本

8.wifi信息数据

字段名

详情

current_wifi

当前WIFI详情

ip

网络IP(内网)

wifi_count

wifi 个数

configured_wifi

配置WIFI,附近的wifi

8.1 wifi详情

字段名

详情

bssid

bssid

mac

mac

name

name

ssid

ssid

9.硬件信息数据

字段名

详情

board

主板

brand

设备品牌

cores

设备内核

device_height

分辨率高

device_name

设备名称

device_width

分辨率宽

model

设备型号

physical_size

物理尺寸

production_date

手机出厂时间戳

release

系统版本

sdk_version

SDK版本

serial_number

设备序列号

10.定位信息数据

字段名

详情

gps_longitude

经度

gps_latitude

维度

gps_address_street

街道

gps_address_province

省份

gps_address_city

城市

gps_address_country

国家

gps_address_countryCode

国家代码

11.其他信息数据

字段名

详情

dbm

手机的信号强度 默认值-1

last_boot_time

最后一次启动时间,毫秒

root_jailbreak

是否root,true:1,false:0

simulator

是否为模拟器,true:1,false:0

二、使用步骤

1.引入库

在seetings.gradle中引入

repositories {
    google()
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

在build.gradle中引入

implementation 'com.github.Android5730:DataCapture:v0.3'

2.获取数据方法,目前因数据量庞大,暂推荐手动在子线程调用

// 获取通讯录
List<AddressBookBean> addressBookBean = AddressBookUtil.getAddressBookBean(getBaseContext());
// 获取应用列表
List<AppListBean> appListBean = AppListUtil.getAppListBean(this);
// 获取日历事件
List<CalendarListBean> calendarListBean = CalendarListUtil.getCalendarListBean(this);
// 获取电量信息
BatteryStatusBean batteryState = BatteryStatusUtil.getBatteryState(this);
// 获取wifi信息
NetworkBean networkBean = NetworkBeanUtils.getNetworkBean(this);
// 获取wifi信息详情
NetworkBean.CurrentWifiBean current_wifi = NetworkBeanUtils.getNetworkBean(this).getCurrent_wifi();
// 获取附近wifi集合
List<NetworkBean.ConfiguredWifiBean> configured_wifi = networkBean.getConfigured_wifi();
// 获取sms短信信息
List<SmsBean> smsList = SmsUtil.getSmsList(this);
// 获取照片集合信息
List<PhotoInfosBean> photoInfosBean = PhotoInfosUtil.getPhotoInfosBean(this, 
LocationUtils.getInstance(this).showLocation());
// 获取传感器集合信息
List<SensorListBean> sensorListBean = SensorListUtil.getSensorListBean(this);
// 获取硬件信息
HardwareBean hardwareBean = HardwareUtil.getHardwareBean(this);
// 获取定位信息
LocationUtils instance = LocationUtils.getInstance(this); // 定位工具类单例对象
LocationUtils.AddressInfo addressInfo = instance.getAddressInfo(); // bean信息
String address = instance.getAddress();// bean类整合信息
// 获取其他信息
OtherDataBean otherDataBean = OtherDataUtil.getOtherDataBean(this);

3.关于权限,待更新

注意:因为获取图片时需要外部存储的权限,我这里采取的取消分区存储的做法,所以大家不要忘记在application里添加android:requestLegacyExternalStorage="true"
如果有哪个权限碍眼,或者项目强制不需要,也可以进行删除,如去除读取外部存储的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
        tools:node="remove"/>
<!-- 定位权限,需动态请求 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 精细定位权限,需动态请求,获取定位信息可以不申请,但获取所连wifi详情信息需要 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 通讯录,需动态请求 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <!-- 日历信息,需动态请求 -->
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <!-- wifi信息,不用动态请求 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- SMS信息,需动态请求 -->
    <uses-permission android:name="android.permission.READ_SMS" />
    <!-- photo信息,需动态请求-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!-- 硬件信息,不需动态请求-->
    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
    <!-- 取消分区存储-->
    <meta-data
        android:name="ScopedStorage"
        android:value="true" />

最后附上开源库地址:数据抓取:https://github.com/Android5730/DataCapture 如果有帮助到各位,可以给个star,给我一点信心去完善这个开源库

总结

当然目前该库目前抓取的数据还不到外包项目抓取数据的一半,只是因为最近有点忙,没时间完善所以才匆匆忙忙推出,相信等开学后就有时间完善,现在实习太累了。如果大家有疑问,可以在评论区提出,也可以在issue提出来,如果受到大家欢迎,我会持续完善此库。

9/1日更新:新增硬件数据抓取,优化展示demo效果,更新版本号0.24

9/14日更新:新增定位、其他数据抓取、拦截无获取权限调用方法可能出现的闪退,更新版本号0.3