概述
上节讲到Android手把手编写儿童手机远程监控App之MQTT与Coturn详解
孩子使用手机时自控能力较弱,容易沉迷其中。相对比学习的影响,对视力的损害更令人担忧,且往往是不可逆的。借助专业的监控软件,家长可以远程了解孩子使用手机的动态。省却家长电话督促,安心工作。这就是嘟宝创立的初中。
嘟宝App安装在孩童手机当中,它应有以下功能:
- 后台常驻存活,实时在线
- GPS功能,记录当前位置及历史位置
- 获取前后相机实时视频流,看到孩子周围状况
- 获取手机实时音频流,听到还在周围的声音
- 获取手机的画面,看到孩子玩什么
- 统计孩子手机使用状况
嘟宝需求分析
后台常驻
在 Android 系统中,由于系统对后台进程的限制(尤其是 Android 8.0+),应用在后台运行时容易被系统回收,导致:
- 核心功能中断
- 数据采集中断
- 实时任务无法完成 因此嘟宝App需要实现后台长期稳定运行机制,需要做到以下内容:
- 前台服务(Foreground Service),通过前台服务提升进程优先级,降低被系统杀死概率
- 自启动(开机启动)
- 任务调度机制,通过系统调度保证任务执行
- 双进程守护,A/B 进程互相拉起
MQTT长期连接
在满足后台常驻存活后,与嘟宝服务器建立长期连接,满足实时在线功能。可使用MQTT协议与中心服务器建立通信。MQTT 是一种专门为低带宽、不稳定网络、物联网场景设计的轻量级消息协议。
- 低功耗,数据包小,长连接减少通信次数,可控制发送频率
- 心跳包非常小(开销极低)
- 支持断线重连
WebRtc音视频通话
WebRTC 是一个专门用于浏览器 、手机App音视频实时通信的技术栈,在性能和实时性方面非常强。它拥有以下特点:
- 超低延迟(核心优势)
- 点对点通信(P2P)
- 自适应网络能力(弱网优化)
- 多媒体能力(麦克风、摄像头、桌面画面)
- 数据通道(DataChannel)
- 各浏览器、Android、IOS多支持平台
嘟宝与嘟妈若能建立视频通信,必须依赖于MQTT协议。嘟妈通过MQTT发起信令,建立WebRtc通信。嘟宝收到信令后,与嘟妈交互协商建立WebRtc通信,建立的条件:
- 协商交互支持的视频编码,h264、vp8、vp9
- 协商交互分辨率、码率
- 协商交互音频编码
- 协商交互双方的网络地址 交互的内容共分成两类: 一是音视频信息,该信息统称为sdp, 二是网络地址信息,该信息统称为ICE 嘟宝与嘟妈若要建立webrtc通信,必须交互这两类信息,而交互的桥梁则是MQTT协议。
[嘟宝] [MQTT Server] [嘟妈]
| | |
|-- 1. 创建Offer (SDP) -------->| |
| |-- 2. 转发Offer -------------------->|
| | |
| |<-- 3. 创建Answer (SDP) --------------|
|<-- 4. 转发Answer ------------| |
| | |
|-- 5. ICE Candidates (通过STUN/TURN收集) --> 交换ICE候选对等建立连接 --|
| | |
|<====================== 6. 建立P2P连接 (DTLS/SRTP) =================>|
流程图可理解为:
- 嘟宝创建SDP,通过MQTT转发给嘟妈
- 嘟妈收到SDP,创建自己的SDP再通过MQTT发送嘟宝
- 完成SDP交互,再交互ICE
- ICE交互完成,建立点对点视频通话
统计手机使用情况
统计孩子手机使用状况,核心意义在于科学管理、保护成长、及时干预,不只是简单 “盯梢”,而是用数据了解孩子使用手机的习惯。对于家庭教育的意义及时发现孩子异常行为,有这重大的帮助。能够监听Android手机的哪些行为?
-
获取Android屏幕点亮、熄灭,统计使用时长
-
统计Android 手机安装的App
-
统计Android 手机运动轨迹
-
统计Android 手机最近使用的app
-
统计一天电池用电量、用电高峰 由于嘟宝后台服务器只安装EMQX、Coturn两种软件,这就使得嘟宝的统计信息,必须存储本地。Android 本地存储,可分成五大类:
-
SharedPreferences(轻量配置)
-
文件存储(File)
-
数据库(SQLite / Room)
-
MMKV(高性能键值存储)
-
ContentProvider(跨应用共享)
| 方式 | 类型 | 性能 | 适合场景 |
| SharedPreferences | KV | ⭐⭐ | 配置 |
| File | 文件 | ⭐⭐⭐ | 缓存/日志 |
| SQLite | 数据库 | ⭐⭐⭐⭐ | 结构化数据 |
| Room | ORM数据库 | ⭐⭐⭐⭐⭐ | 大型项目 |
| MMKV | KV | ⭐⭐⭐⭐⭐ | 高频存储 |
嘟宝选择SQLite是最佳选择。其中SQLite是结构化数据,是一种轻量级嵌入式关系型数据库,广泛应用在移动端(尤其是 Android)、桌面应用以及 IoT 设备中。SQLite核心特点
- 轻量级,整个数据库就是一个文件(.db),无需安装数据库服务(不像 MySQL)
- 嵌入式,直接集成在应用中,Android 系统原生内置 SQLite
- 支持标准SQL,数据增删改查、及事务的支持
- 零配置,不需要启动服务,用户密码,开箱即用