官方文档
https://reactnative.dev/docs/environment-setup
本文使用的版本是0.71版本
使用的是win10开发(目前只适配安卓手机,不考虑iphone)
github地址:
https://github.com/react-native-device-info/react-native-device-info
React Native 获取 iOS 和 Android 的设备信息
最新更新时间是本文发布的3周以前,可以放心使用
使用方法
下载依赖
yarn add react-native-device-info
引入依赖
import DeviceInfo from 'react-native-device-info'
获取当前手机电量信息
DeviceInfo.getBatteryLevel().then((batteryLevel) => {
console.log(`当前电池电量`,batteryLevel)
});
这个开源库,不仅支持电量获取,还有其他几十个API,可自行参开官方文档
第一次使用js的setintervalde的定时函数,执行HTTP请求
发现当APP切回到后台是,定时器立马停止执行,所以这个方案不行
官方后台任务-Headless JS
文档地址
https://reactnative.cn/docs/headless-js-android
官方描述
Headless JS 是一种使用 js 在后台执行任务的方法。它可以用来在后台同步数据、处理推送通知或是播放音乐等等
也就是即便APP从前台界面切换到后台,任务依旧会执行,只要进程不被Kill
不仅仅是切换到后台,锁屏场景下也会继续执行,这正是我们需要的效果
建议使用第三方库:react-native-background-timer
github地址
https://github.com/ocetnik/react-native-background-timer
这个开源库的Tag最新一期在2020年,本文的React Native 2023年,本文测试,这个库在安卓手机上目前使用正常,能构建和使用
使用方式
下载依赖
yarn add react-native-background-timer
引入依赖
import BackgroundTimer from 'react-native-background-timer'
使用方法
// 后台任务
BackgroundTimer.runBackgroundTimer(() => {
console.log(`每3秒执行一次`)
},
3000);
测试后台任务时,使用的是HTTP服务,经过12小时的锁屏待机测试,APP每隔几秒都在正常的请求HTTP通信,没有被进程杀掉
关于手机设置APP保活的操作,会拆分为另一篇文章来记录
参考以下文章
《安卓手机-小米设置React Native APP锁屏后常驻后台保活,避免被杀掉进程》
除了使用HTTP的通信方式,还可以使用MQTT的方式
因为它足够轻量,可以保持长连接,避免手机过多消耗电量和带宽,同时支持订阅发布模式,Home Assistant只在手机发布通知时,才会有对应的交互操作
不要两个设备频繁请求响应
npm地址
https://www.npmjs.com/package/@openrc/react-native-mqtt
github地址:
https://github.com/mqttjs/MQTT.js
官方描述
一个极简的MQTT库,支持react-native,保持MQTT同步,支持emq和mosquitto
下载依赖
yarn add @openrc/react-native-mqtt
引入依赖
import MQTT from '@openrc/react-native-mqtt'
使用方式
const client = MQTT.connect('ws://car.openrc.top/mqtt', {
port: 8083,
protocol: 'ws',
username: 'your username',
password: 'your password',
reconnectPeriod: 30 * 1000,
qos: 2,
});
client.on('closed', function () {
console.log('mqtt event closed');
});
client.on('error', function (msg) {
console.log('mqtt event error', msg);
});
client.on('connect', function () {
console.log('connected mqtt');
});
其他React Native 开源库
可以看到本文使用的是最新的支持React Native的库,3年前更新
经过测试,这个库能够正常运行,连接MQTT
本文使用的MQTT服务,使用开源的EMQX
参考文章
《Docker Compose部署开源免费EMQX MQTT服务 用于Home Assistant MQTT通信》
至此,一个支持后台锁屏定时任务,可以获取手机电量并且MQTT通信的APP完成
主要用于设置闲置手机设置电量阈值,通过Home Assistant设置智能插座开关,避免电池鼓包,过度充电,造成的安全隐患,也能保持手机一直开机,正常接收短信,电话,以及自动化任务等
Home Assistant设置手机自动充电
参考文章
《Home Assistant智能家具设置MQTT通信 联通智能插座自动化开关》
END