md
This commit is contained in:
parent
195a1650a9
commit
8f327bcb0e
460
common/lbs/XdLbsUniSdk.js
Normal file
460
common/lbs/XdLbsUniSdk.js
Normal file
@ -0,0 +1,460 @@
|
||||
/*
|
||||
XdLbsUniSdk
|
||||
*/
|
||||
class XdLbsUniSdk {
|
||||
|
||||
VERSION="1.0.0"
|
||||
MAX_SENT_RETRY_COUNT = 9;
|
||||
LBS_UP_FREQ = 60 ;
|
||||
WS_URL = 'wss://pushlbs.xdadan.com/ws';
|
||||
custNo = null;
|
||||
deviceNo =null;
|
||||
|
||||
msisdn = null;
|
||||
|
||||
deviceInfo = null;
|
||||
batteryInfo = null;
|
||||
maximumAge = 60000;
|
||||
|
||||
token = null;
|
||||
|
||||
AUTH_TOKEN=null;
|
||||
|
||||
WS_INIT = 0;
|
||||
WS_OPEN = 1;
|
||||
WS_CLOSING = 2;
|
||||
WS_CLOSE = 3;
|
||||
|
||||
// 和服务端连接的socket对象
|
||||
ws = null;
|
||||
// WS 回调函数
|
||||
onOpenCallback =[];
|
||||
onCloseCallback=[];
|
||||
onErrorCallback =[];
|
||||
onMessageCallback=[];
|
||||
|
||||
lbsWatcherId = null;
|
||||
|
||||
registerCheckTimer = null;
|
||||
heartbeatChenkTimer = null;
|
||||
|
||||
// 自定义 回调函数
|
||||
callbacks ={}
|
||||
|
||||
// 标识:是否连接成功 , 记录重试的次数,重新连接尝试的次数
|
||||
connected = false;
|
||||
printerIsRead = false;
|
||||
sendRetryCount = 0;
|
||||
connectRetryCount = 0;
|
||||
|
||||
static instance = null;
|
||||
constructor(custNo) {
|
||||
this.instance = null
|
||||
this.custNo=custNo
|
||||
}
|
||||
static getInstance(custNo) {
|
||||
if (!this.instance) {
|
||||
this.instance = new XdLbsUniSdk(custNo)
|
||||
}
|
||||
return this.instance
|
||||
}
|
||||
// 外部方法----------------------------------------------------------------
|
||||
init(deviceNo){
|
||||
// 初始化参数建立连接
|
||||
// this.token=getToken();
|
||||
|
||||
if(this.deviceNo==null){
|
||||
this.deviceNo=deviceNo;
|
||||
this.connect();
|
||||
this.start();
|
||||
this.initBatteryInfo();
|
||||
this.initDeviceInfo();
|
||||
|
||||
// init lbs
|
||||
this.maximumAge = Number(this.LBS_UP_FREQ) * Number(1000);
|
||||
this.startLbs(this.maximumAge);
|
||||
}
|
||||
}
|
||||
|
||||
setOnOpen(callback){
|
||||
this.onOpenCallback.push(callback);
|
||||
|
||||
if(this.connected){
|
||||
if(callback!=null){
|
||||
callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setOnClose(callback){
|
||||
this.onCloseCallback.push(callback);
|
||||
|
||||
if(!this.connected){
|
||||
if(callback!=null){
|
||||
callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setOnError(callback){
|
||||
this.onErrorCallback.push(callback);
|
||||
}
|
||||
|
||||
setOnMessage(callback){
|
||||
this.onMessageCallback.push(callback);
|
||||
if(this.connected){
|
||||
if(callback!=null){
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getRequestId() {
|
||||
let requestId = 'req' + new Date().getTime().toString(36) + Math.random().toString(36).substring(2, 9);
|
||||
return requestId;
|
||||
}
|
||||
|
||||
//--内部方法--------------------------------------------------------------
|
||||
|
||||
// 连接服务器的方法
|
||||
connect() {
|
||||
const that=this;
|
||||
if (!this.ws || this.getWSReadyState() === this.WS_CLOSING || this.getWSReadyState() === this.WS_CLOSE) {
|
||||
try {
|
||||
this.ws = uni.connectSocket({
|
||||
url: this.WS_URL,
|
||||
header: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
protocols: ['protocol1'],
|
||||
success(res){
|
||||
// console.error("connectSocket success====");
|
||||
console.log('WebSocket 连接启动成功');
|
||||
that.connectRetryCount = 0; // 重置重连计数
|
||||
},
|
||||
fail(err) {
|
||||
console.error("connectSocket fail====", err)
|
||||
setTimeout(reConnectSock, 3000)
|
||||
}
|
||||
})
|
||||
|
||||
this.ws.onError((err)=> {
|
||||
console.log('ws.onError: ', JSON.stringify(err));
|
||||
// console.log("ws onerror!");
|
||||
if(this.onErrorCallback.length>0){
|
||||
this.onErrorCallback.forEach(callback=>{
|
||||
if(callback!=null){
|
||||
callback(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.ws.onOpen((res)=>{
|
||||
console.log("===>ws onopen!");
|
||||
this.connected = true
|
||||
this.connectRetryCount = 0
|
||||
|
||||
// 注册客户端
|
||||
this.register()
|
||||
|
||||
if(this.onOpenCallback.length>0){
|
||||
this.onOpenCallback.forEach(callback=>{
|
||||
if(callback!=null){
|
||||
callback();
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.ws.onClose((res = {})=> {
|
||||
console.log('ws.onClose: ', JSON.stringify(res));
|
||||
this.connected = false;
|
||||
this.connectRetryCount++;
|
||||
if(this.connectRetryCount>120){
|
||||
this.connectRetryCount=0;
|
||||
}
|
||||
if(this.onCloseCallback.length>0){
|
||||
this.onCloseCallback.forEach(callback=>{
|
||||
if(callback!=null){
|
||||
callback();
|
||||
}
|
||||
})
|
||||
}
|
||||
// * this.connectRetryCount
|
||||
setTimeout(() => {
|
||||
this.connect()
|
||||
}, 1000 )
|
||||
})
|
||||
|
||||
this.ws.onMessage(function (res) {
|
||||
console.log('==>ws onmessage:' + res.data)
|
||||
let resData = JSON.parse(res.data)
|
||||
|
||||
if(resData.code == 200){
|
||||
let resCmd=resData.data;
|
||||
if(resCmd.cmdType=='LbsRegister'){
|
||||
that.msisdn = resCmd.msisdn
|
||||
}
|
||||
}
|
||||
|
||||
// if(this.onMessageCallback.length>0){
|
||||
// this.onMessageCallback.forEach(callback=>{
|
||||
// if(callback!=null){
|
||||
// callback(e.data);
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
})
|
||||
|
||||
} catch (ex) {
|
||||
setTimeout(() => {
|
||||
this.connect()
|
||||
}, 60000 )
|
||||
}
|
||||
}
|
||||
|
||||
return this.ws;
|
||||
}
|
||||
|
||||
jsonToObj(json){
|
||||
return JSON.parse(json)
|
||||
}
|
||||
|
||||
objToJson(obj){
|
||||
return JSON.stringify(obj)
|
||||
}
|
||||
|
||||
/**
|
||||
* readyState->0:尚未建立连接;1:已经建立连接;2:正在关闭;3:已经关闭或不可用
|
||||
* 0:连接正在建立
|
||||
1:连接已建立,可以通信
|
||||
2:连接正在关闭
|
||||
3:连接已关闭或无法打开
|
||||
* @param thisWs
|
||||
* @returns {*}
|
||||
*/
|
||||
getWSReadyState() {
|
||||
if (this.ws.readyState !== undefined) {
|
||||
return this.ws.readyState;
|
||||
}
|
||||
return this.WS_INIT;
|
||||
};
|
||||
|
||||
// 发送数据的方法
|
||||
send(data) {
|
||||
// console.log("send:"+data)
|
||||
if (this.getWSReadyState() === this.WS_OPEN ) {
|
||||
this.sendRetryCount = 0
|
||||
this.ws.send({data:data})
|
||||
return 1;
|
||||
} else {
|
||||
console.log("Ws is abnormal,send faild!!")
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭socket连接
|
||||
close() {
|
||||
if (this.ws) {
|
||||
this.ws.close();
|
||||
this.connected = false; // 更新连接状态
|
||||
clearInterval(this.heartbeatChenkTimer); // 清除心跳检测定时器
|
||||
clearInterval(this.registerCheckTimer);
|
||||
}
|
||||
}
|
||||
// 开启检测
|
||||
start() {
|
||||
const that=this;
|
||||
this.heartbeatChenkTimer = setInterval(() => {
|
||||
that.connect()
|
||||
}, 600000);
|
||||
|
||||
this.registerCheckTimer = setInterval(() => {
|
||||
this.register();
|
||||
}, 60000);
|
||||
}
|
||||
|
||||
// 注册客户端
|
||||
register(){
|
||||
if(this.deviceNo != null && this.msisdn == null){
|
||||
let postData = {
|
||||
cmdType:"LbsRegister",
|
||||
custNo:this.custNo,
|
||||
deviceNo:this.deviceNo,
|
||||
reqId:this.getRequestId(),
|
||||
// deviceInfo:this.deviceInfo
|
||||
}
|
||||
const jsonString = JSON.stringify(postData)
|
||||
let base64Str=btoa(jsonString)
|
||||
this.send(base64Str);
|
||||
}
|
||||
}
|
||||
|
||||
initDeviceInfo() {
|
||||
const that=this
|
||||
if(that.deviceInfo==null){
|
||||
that.deviceInfo = uni.getSystemInfoSync()
|
||||
}
|
||||
}
|
||||
|
||||
//检测是否开启系统定位权限
|
||||
hasLocationPermission() {
|
||||
let system = uni.getSystemInfoSync();
|
||||
if (system.platform === 'android') { //安卓
|
||||
let context = plus.android.importClass("android.content.Context");
|
||||
let locationManager = plus.android.importClass("android.location.LocationManager");
|
||||
let main = plus.android.runtimeMainActivity();
|
||||
let service = main.getSystemService(context.LOCATION_SERVICE);
|
||||
//已开启系统定位服务功能
|
||||
if (service.isProviderEnabled(locationManager.GPS_PROVIDER)) return true;
|
||||
else { //未开启引导开启
|
||||
uni.showModal({
|
||||
title: '友情提示',
|
||||
content: '请开启位置服务功能',
|
||||
success: e => {
|
||||
if (e.confirm) {
|
||||
//打开手机系统gps定位设置页面
|
||||
let Intent = plus.android.importClass('android.content.Intent');
|
||||
let Settings = plus.android.importClass('android.provider.Settings');
|
||||
let intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||||
main.startActivity(intent);
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
} else if (system.platform === 'ios') { //ios
|
||||
let cllocationManger = plus.ios.import("CLLocationManager");
|
||||
let enable = cllocationManger.locationServicesEnabled();
|
||||
let status = cllocationManger.authorizationStatus();
|
||||
plus.ios.deleteObject(cllocationManger);
|
||||
if (enable && status != 2) return true; //已开启定位功能
|
||||
else {
|
||||
uni.showModal({
|
||||
title: '友情提示',
|
||||
content: '请前往设置-定位服务打开定位服务功能',
|
||||
success: e => {
|
||||
if (e.confirm) {
|
||||
let UIApplication = plus.ios.import("UIApplication");
|
||||
let application = UIApplication.sharedApplication();
|
||||
let NSURL = plus.ios.import("NSURL");
|
||||
let setting = NSURL.URLWithString("app-settings:");
|
||||
application.openURL(setting);
|
||||
plus.ios.deleteObject(setting);
|
||||
plus.ios.deleteObject(NSURL);
|
||||
plus.ios.deleteObject(application);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
startLbs(maximumAge = 60*1000) {
|
||||
const that=this;
|
||||
console.log("==>maximumAge:",maximumAge)
|
||||
// 先关闭再启动
|
||||
this.closeLbs();
|
||||
|
||||
if (this.hasLocationPermission()) { //有定位权限
|
||||
that.lbsWatcherId = plus.geolocation.watchPosition((position) => {
|
||||
let coords=position.coords
|
||||
if(that.deviceNo != null && that.msisdn != null){
|
||||
let postData = {
|
||||
cmdType:"LbsPush",
|
||||
custNo:that.custNo,
|
||||
deviceNo:that.deviceNo,
|
||||
reqId:that.getRequestId(),
|
||||
msisdn:that.msisdn,
|
||||
longitude:coords.longitude,
|
||||
latitude:coords.latitude,
|
||||
altitude:coords.altitude,
|
||||
heading:coords.heading,
|
||||
speed:coords.speed,
|
||||
altitudeAccuracy:coords.altitudeAccuracy,
|
||||
battaryRate:-1,
|
||||
}
|
||||
const jsonString = JSON.stringify(postData)
|
||||
let base64Str=btoa(jsonString)
|
||||
that.send(base64Str);
|
||||
}
|
||||
|
||||
}, function(e) {
|
||||
console.log(e, '定位失败');
|
||||
}, {
|
||||
maximumAge, //获取位置间隔时间,在不同定位模块下支持范围值可能不同,如百度定位模块的间隔范围为大于等于1秒,如果设置的值小于最小值则使用最小值。iOS平台根据设备位置变化自动计算回调更新的间隔时间。
|
||||
// provider: 'amap', //优先使用定位模块,“system”:表示系统定位模块,支持wgs84坐标系; “baidu”:表示百度定位模块,支持gcj02/bd09/bd09ll坐标系; “amap”:表示高德定位模板,支持gcj02坐标系,默认值按以下优先顺序获取(amap>baidu>system)
|
||||
// timeout: 10000, //定位超时
|
||||
enableHighAccuracy: true,//高精确度获取位置信息
|
||||
coordsType:"wgs84",//坐标系类型, “wgs84”:表示WGS-84坐标系; “gcj02”:表示国测局经纬度坐标系,"bd09":百度地图使用的坐标系
|
||||
//geocode:false//是否解析地址
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 应用启动时初始化
|
||||
// initBatteryInfo() {
|
||||
// const env = uni.getEnv();
|
||||
// console.log('==>initBatteryInfo==env=>:', env)
|
||||
// if (env === uni.ENV_TYPE.APP) {
|
||||
// // App 端使用 uni API
|
||||
// return uni.getBatteryInfo({
|
||||
// success: (res) => console.log('App 电量:', res),
|
||||
// fail: (err) => console.error('App 获取失败:', err)
|
||||
// });
|
||||
// } else if (env === uni.ENV_TYPE.WECHAT) {
|
||||
// // 微信小程序使用 wx API(兼容处理)
|
||||
// return wx.getBatteryInfo({
|
||||
// success: (res) => console.log('微信电量:', res),
|
||||
// fail: (err) => console.error('微信获取失败:', err)
|
||||
// });
|
||||
// } else if (env === uni.ENV_TYPE.H5) {
|
||||
// // H5 端使用浏览器 API
|
||||
// if (navigator.getBattery) {
|
||||
// return navigator.getBattery().then(battery => {
|
||||
// console.log('H5 电量:', {
|
||||
// level: Math.round(battery.level * 100),
|
||||
// isCharging: battery.charging
|
||||
// });
|
||||
// }).catch(err => console.error('H5 获取失败:', err));
|
||||
// } else {
|
||||
// console.warn('当前浏览器不支持电池 API');
|
||||
// }
|
||||
// } else {
|
||||
// console.warn('当前平台不支持获取电池信息');
|
||||
// }
|
||||
// }
|
||||
|
||||
async initBatteryInfo() {
|
||||
const that=this;
|
||||
try {
|
||||
this.batteryInfo = await uni.getBatteryInfo();
|
||||
console.log('电量信息已缓存:', this.batteryInfo);
|
||||
// 监听电量变化,实时更新缓存
|
||||
uni.onBatteryInfoChange(info => {
|
||||
that.batteryInfo = info;
|
||||
console.log('电量变化:', this.batteryInfo);
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('初始化电量失败:', err);
|
||||
}
|
||||
}
|
||||
|
||||
// 同步获取缓存的电量
|
||||
getBatteryLevel() {
|
||||
return cachedBatteryInfo?.level ?? -1;
|
||||
}
|
||||
|
||||
//关闭定位功能
|
||||
closeLbs() {
|
||||
if(this.lbsWatcherId!=null){
|
||||
plus.geolocation.clearWatch(this.lbsWatcherId)
|
||||
this.lbsWatcherId=null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default XdLbsUniSdk;
|
||||
BIN
static/images/mine/daihuikuan.png
Normal file
BIN
static/images/mine/daihuikuan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
16
uni_modules/uni-getbatteryinfo/changelog.md
Normal file
16
uni_modules/uni-getbatteryinfo/changelog.md
Normal file
@ -0,0 +1,16 @@
|
||||
## 1.3.2(2024-10-14)
|
||||
- 新增 支持 HarmonyOS Next 调用
|
||||
## 1.3.1(2023-09-15)
|
||||
app端适配使用UniError
|
||||
|
||||
## 1.3.0(2023-05-30)
|
||||
新增 同步获取电量api
|
||||
|
||||
## 1.2.0(2022-10-17)
|
||||
实现百度小程序/支付宝小程序/QQ小程序获取电量
|
||||
|
||||
## 1.1.0(2022-10-17)
|
||||
实现ios平台获取电量
|
||||
|
||||
## 1.0.0(2022-09-01)
|
||||
实现android/web/微信小程序平台获取电量
|
||||
94
uni_modules/uni-getbatteryinfo/package.json
Normal file
94
uni_modules/uni-getbatteryinfo/package.json
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"id": "uni-getbatteryinfo",
|
||||
"displayName": "uni-getbatteryinfo",
|
||||
"version": "1.3.2",
|
||||
"description": "使用uts开发,实现在多个平台获取电池电量功能",
|
||||
"keywords": [
|
||||
"battery"
|
||||
],
|
||||
"repository": "",
|
||||
"engines": {
|
||||
"HBuilderX": "^3.9.0"
|
||||
},
|
||||
"dcloudext": {
|
||||
"type": "uts",
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "插件不采集任何数据",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": ""
|
||||
},
|
||||
"uni_modules": {
|
||||
"uni-ext-api": {
|
||||
"uni": {
|
||||
"getBatteryInfo": "getBatteryInfo",
|
||||
"getBatteryInfoSync": {
|
||||
"web": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": [],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y",
|
||||
"alipay": "n"
|
||||
},
|
||||
"client": {
|
||||
"Vue": {
|
||||
"vue2": "n",
|
||||
"vue3": "y"
|
||||
},
|
||||
"App": {
|
||||
"app-android": {
|
||||
"minVersion": "21"
|
||||
},
|
||||
"app-ios": {
|
||||
"minVersion": "9"
|
||||
}
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "u",
|
||||
"QQ": "y",
|
||||
"钉钉": "u",
|
||||
"快手": "u",
|
||||
"飞书": "u",
|
||||
"京东": "u"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
38
uni_modules/uni-getbatteryinfo/readme.md
Normal file
38
uni_modules/uni-getbatteryinfo/readme.md
Normal file
@ -0,0 +1,38 @@
|
||||
# uni-getbatteryinfo
|
||||
|
||||
## 使用文档
|
||||
|
||||
```ts
|
||||
// 获取电量信息
|
||||
uni.getBatteryInfo({
|
||||
success(res) {
|
||||
console.log(res);
|
||||
uni.showToast({
|
||||
title: "当前电量:" + res.level + '%',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 参数
|
||||
|
||||
Object object
|
||||
|
||||
|属性|类型|必填|说明|
|
||||
|----|---|----|----|
|
||||
|success|function|否|接口调用成功的回调函数|
|
||||
|fail|function|否|接口调用失败的回调函数|
|
||||
|complete|function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
|
||||
|
||||
|
||||
|
||||
object.success 回调函数
|
||||
|
||||
|
||||
|属性|类型|说明|
|
||||
|----|---|----|
|
||||
|level|number|设备电量,范围 1 - 100|
|
||||
|isCharging|boolean|是否正在充电中|
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"minSdkVersion": "21"
|
||||
}
|
||||
84
uni_modules/uni-getbatteryinfo/utssdk/app-android/index.uts
Normal file
84
uni_modules/uni-getbatteryinfo/utssdk/app-android/index.uts
Normal file
@ -0,0 +1,84 @@
|
||||
import Context from "android.content.Context";
|
||||
import BatteryManager from "android.os.BatteryManager";
|
||||
|
||||
import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult,GetBatteryInfoSync } from '../interface.uts'
|
||||
import IntentFilter from 'android.content.IntentFilter';
|
||||
import Intent from 'android.content.Intent';
|
||||
|
||||
import { GetBatteryInfoFailImpl } from '../unierror';
|
||||
|
||||
/**
|
||||
* 异步获取电量
|
||||
*/
|
||||
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {
|
||||
|
||||
|
||||
const context = UTSAndroid.getAppContext();
|
||||
if (context != null) {
|
||||
const manager = context.getSystemService(
|
||||
Context.BATTERY_SERVICE
|
||||
) as BatteryManager;
|
||||
const level = manager.getIntProperty(
|
||||
BatteryManager.BATTERY_PROPERTY_CAPACITY
|
||||
);
|
||||
|
||||
let ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||
let batteryStatus = context.registerReceiver(null, ifilter);
|
||||
let status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||
let isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
|
||||
|
||||
const res : GetBatteryInfoSuccess = {
|
||||
errMsg: 'getBatteryInfo:ok',
|
||||
level,
|
||||
isCharging: isCharging
|
||||
}
|
||||
options.success?.(res)
|
||||
options.complete?.(res)
|
||||
} else {
|
||||
let res = new GetBatteryInfoFailImpl(1001);
|
||||
options.fail?.(res)
|
||||
options.complete?.(res)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步获取电量示例
|
||||
*/
|
||||
export const getBatteryInfoSync : GetBatteryInfoSync = function (): GetBatteryInfoResult {
|
||||
|
||||
const context = UTSAndroid.getAppContext();
|
||||
if (context != null) {
|
||||
|
||||
|
||||
const manager = context.getSystemService(
|
||||
Context.BATTERY_SERVICE
|
||||
) as BatteryManager;
|
||||
const level = manager.getIntProperty(
|
||||
BatteryManager.BATTERY_PROPERTY_CAPACITY
|
||||
);
|
||||
|
||||
let ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||
let batteryStatus = context.registerReceiver(null, ifilter);
|
||||
let status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||
let isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
|
||||
|
||||
const res : GetBatteryInfoResult = {
|
||||
level: level,
|
||||
isCharging: isCharging
|
||||
};
|
||||
|
||||
return res;
|
||||
}
|
||||
else {
|
||||
/**
|
||||
* 无有效上下文
|
||||
*/
|
||||
const res : GetBatteryInfoResult = {
|
||||
level: -1,
|
||||
isCharging: false
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
27
uni_modules/uni-getbatteryinfo/utssdk/app-harmony/index.uts
Normal file
27
uni_modules/uni-getbatteryinfo/utssdk/app-harmony/index.uts
Normal file
@ -0,0 +1,27 @@
|
||||
import batteryInfo from '@ohos.batteryInfo';
|
||||
import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult, GetBatteryInfoSync } from '../interface.uts';
|
||||
|
||||
export const getBatteryInfoSync : GetBatteryInfoSync = function () : GetBatteryInfoResult {
|
||||
return {
|
||||
level: batteryInfo.batterySOC,
|
||||
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
|
||||
};
|
||||
}
|
||||
|
||||
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {
|
||||
const batteryInfoResult : GetBatteryInfoSuccess = {
|
||||
errMsg: "getBatteryInfo:ok",
|
||||
level: batteryInfo.batterySOC,
|
||||
isCharging: batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.ENABLE || batteryInfo.chargingStatus === batteryInfo.BatteryChargeState.FULL,
|
||||
}
|
||||
try {
|
||||
options.success && options.success(batteryInfoResult)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
try {
|
||||
options.complete && options.complete(batteryInfoResult)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"deploymentTarget": "9"
|
||||
}
|
||||
34
uni_modules/uni-getbatteryinfo/utssdk/app-ios/index.uts
Normal file
34
uni_modules/uni-getbatteryinfo/utssdk/app-ios/index.uts
Normal file
@ -0,0 +1,34 @@
|
||||
// 引用 iOS 原生平台 api
|
||||
import { UIDevice } from "UIKit";
|
||||
|
||||
import { GetBatteryInfo, GetBatteryInfoSuccess, GetBatteryInfoResult, GetBatteryInfoSync } from '../interface.uts';
|
||||
/**
|
||||
* 导出 获取电量方法
|
||||
*/
|
||||
export const getBatteryInfo : GetBatteryInfo = function (options) {
|
||||
|
||||
// 开启电量检测
|
||||
UIDevice.current.isBatteryMonitoringEnabled = true
|
||||
|
||||
// 返回数据
|
||||
const res : GetBatteryInfoSuccess = {
|
||||
errMsg: "getBatteryInfo:ok",
|
||||
level: Number(UIDevice.current.batteryLevel * 100),
|
||||
isCharging: UIDevice.current.batteryState == UIDevice.BatteryState.charging,
|
||||
};
|
||||
options.success?.(res);
|
||||
options.complete?.(res);
|
||||
}
|
||||
|
||||
export const getBatteryInfoSync : GetBatteryInfoSync = function (): GetBatteryInfoResult {
|
||||
|
||||
// 开启电量检测
|
||||
UIDevice.current.isBatteryMonitoringEnabled = true
|
||||
|
||||
// 返回数据
|
||||
const res : GetBatteryInfoResult = {
|
||||
level: Number(UIDevice.current.batteryLevel * 100),
|
||||
isCharging: UIDevice.current.batteryState == UIDevice.BatteryState.charging,
|
||||
};
|
||||
return res;
|
||||
}
|
||||
43
uni_modules/uni-getbatteryinfo/utssdk/index.d.ts
vendored
Normal file
43
uni_modules/uni-getbatteryinfo/utssdk/index.d.ts
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
declare namespace UniNamespace {
|
||||
interface GetBatteryInfoSuccessCallbackResult {
|
||||
/**
|
||||
* 是否正在充电中
|
||||
*/
|
||||
isCharging: boolean;
|
||||
/**
|
||||
* 设备电量,范围 1 - 100
|
||||
*/
|
||||
level: number;
|
||||
errMsg: string;
|
||||
}
|
||||
|
||||
interface GetBatteryInfoOption {
|
||||
/**
|
||||
* 接口调用结束的回调函数(调用成功、失败都会执行)
|
||||
*/
|
||||
complete?: Function
|
||||
/**
|
||||
* 接口调用失败的回调函数
|
||||
*/
|
||||
fail?: Function
|
||||
/**
|
||||
* 接口调用成功的回调函数
|
||||
*/
|
||||
success?: (result: GetBatteryInfoSuccessCallbackResult) => void
|
||||
}
|
||||
}
|
||||
|
||||
declare interface Uni {
|
||||
/**
|
||||
* 获取设备电量
|
||||
*
|
||||
* @tutorial https://uniapp.dcloud.net.cn/api/system/batteryInfo.html
|
||||
*/
|
||||
getBatteryInfo(option?: UniNamespace.GetBatteryInfoOption): void;
|
||||
|
||||
/**
|
||||
* 同步获取电池电量信息
|
||||
* @tutorial https://uniapp.dcloud.net.cn/api/system/batteryInfo.html
|
||||
*/
|
||||
getBatteryInfoSync(): UniNamespace.GetBatteryInfoSuccessCallbackResult;
|
||||
}
|
||||
147
uni_modules/uni-getbatteryinfo/utssdk/interface.uts
Normal file
147
uni_modules/uni-getbatteryinfo/utssdk/interface.uts
Normal file
@ -0,0 +1,147 @@
|
||||
export type GetBatteryInfoSuccess = {
|
||||
errMsg: string,
|
||||
/**
|
||||
* 设备电量,范围1 - 100
|
||||
*/
|
||||
level: number,
|
||||
/**
|
||||
* 是否正在充电中
|
||||
*/
|
||||
isCharging: boolean
|
||||
}
|
||||
|
||||
export type GetBatteryInfoOptions = {
|
||||
/**
|
||||
* 接口调用结束的回调函数(调用成功、失败都会执行)
|
||||
*/
|
||||
success?: (res: GetBatteryInfoSuccess) => void
|
||||
/**
|
||||
* 接口调用失败的回调函数
|
||||
*/
|
||||
fail?: (res: UniError) => void
|
||||
/**
|
||||
* 接口调用成功的回调
|
||||
*/
|
||||
complete?: (res: any) => void
|
||||
}
|
||||
|
||||
export type GetBatteryInfoResult = {
|
||||
/**
|
||||
* 设备电量,范围1 - 100
|
||||
*/
|
||||
level: number,
|
||||
/**
|
||||
* 是否正在充电中
|
||||
*/
|
||||
isCharging: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
* - 1001 getAppContext is null
|
||||
*/
|
||||
export type GetBatteryInfoErrorCode = 1001 | 1002;
|
||||
/**
|
||||
* GetBatteryInfo 的错误回调参数
|
||||
*/
|
||||
export interface GetBatteryInfoFail extends IUniError {
|
||||
errCode: GetBatteryInfoErrorCode
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取电量信息
|
||||
* @param {GetBatteryInfoOptions} options
|
||||
*
|
||||
*
|
||||
* @tutorial https://uniapp.dcloud.net.cn/api/system/batteryInfo.html
|
||||
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
|
||||
* @since 3.6.11
|
||||
*
|
||||
* @assert () => success({errCode: 0, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:ok", level: 60, isCharging: false })
|
||||
* @assert () => fail({errCode: 1001, errSubject: "uni-getBatteryInfo", errMsg: "getBatteryInfo:fail getAppContext is null" })
|
||||
*/
|
||||
export type GetBatteryInfo = (options: GetBatteryInfoOptions) => void
|
||||
|
||||
|
||||
export type GetBatteryInfoSync = () => GetBatteryInfoResult
|
||||
|
||||
interface Uni {
|
||||
|
||||
/**
|
||||
* 获取电池电量信息
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* uni.getBatteryInfo({
|
||||
* success(res) {
|
||||
* console.log(res);
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
* @remark
|
||||
* - 该接口需要同步调用
|
||||
* @uniPlatform {
|
||||
* "app": {
|
||||
* "android": {
|
||||
* "osVer": "4.4.4",
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "3.9.0"
|
||||
* },
|
||||
* "ios": {
|
||||
* "osVer": "12.0",
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "4.11"
|
||||
* },
|
||||
* "harmony": {
|
||||
* "osVer": "3.0",
|
||||
* "uniVer": "4.23",
|
||||
* "unixVer": "x"
|
||||
* }
|
||||
* },
|
||||
* "web": {
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "4.0"
|
||||
* }
|
||||
* }
|
||||
* @uniVueVersion 2,3 //支持的vue版本
|
||||
*
|
||||
*/
|
||||
getBatteryInfo(options: GetBatteryInfoOptions): void,
|
||||
/**
|
||||
* 同步获取电池电量信息
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* uni.getBatteryInfo()
|
||||
* ```
|
||||
* @remark
|
||||
* - 该接口需要同步调用
|
||||
* @uniPlatform {
|
||||
* "app": {
|
||||
* "android": {
|
||||
* "osVer": "4.4.4",
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "3.9.0"
|
||||
* },
|
||||
* "ios": {
|
||||
* "osVer": "12.0",
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "4.11"
|
||||
* },
|
||||
* "harmony": {
|
||||
* "osVer": "3.0",
|
||||
* "uniVer": "4.23",
|
||||
* "unixVer": "x"
|
||||
* }
|
||||
* },
|
||||
* "web": {
|
||||
* "uniVer": "3.6.11",
|
||||
* "unixVer": "4.0"
|
||||
* }
|
||||
* }
|
||||
* @uniVueVersion 2,3 //支持的vue版本
|
||||
*
|
||||
*/
|
||||
getBatteryInfoSync(): GetBatteryInfoResult
|
||||
|
||||
}
|
||||
6
uni_modules/uni-getbatteryinfo/utssdk/mp-alipay/index.js
Normal file
6
uni_modules/uni-getbatteryinfo/utssdk/mp-alipay/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
export function getBatteryInfo(options) {
|
||||
return my.getBatteryInfo(options)
|
||||
}
|
||||
export function getBatteryInfoSync(options) {
|
||||
return my.getBatteryInfoSync(options)
|
||||
}
|
||||
6
uni_modules/uni-getbatteryinfo/utssdk/mp-baidu/index.js
Normal file
6
uni_modules/uni-getbatteryinfo/utssdk/mp-baidu/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
export function getBatteryInfo(options) {
|
||||
return swan.getBatteryInfo(options)
|
||||
}
|
||||
export function getBatteryInfoSync(options) {
|
||||
return swan.getBatteryInfoSync(options)
|
||||
}
|
||||
6
uni_modules/uni-getbatteryinfo/utssdk/mp-qq/index.js
Normal file
6
uni_modules/uni-getbatteryinfo/utssdk/mp-qq/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
export function getBatteryInfo(options) {
|
||||
return qq.getBatteryInfo(options)
|
||||
}
|
||||
export function getBatteryInfoSync(options) {
|
||||
return qq.getBatteryInfoSync(options)
|
||||
}
|
||||
6
uni_modules/uni-getbatteryinfo/utssdk/mp-weixin/index.js
Normal file
6
uni_modules/uni-getbatteryinfo/utssdk/mp-weixin/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
export function getBatteryInfo(options) {
|
||||
return wx.getBatteryInfo(options)
|
||||
}
|
||||
export function getBatteryInfoSync(options) {
|
||||
return wx.getBatteryInfoSync(options)
|
||||
}
|
||||
35
uni_modules/uni-getbatteryinfo/utssdk/unierror.uts
Normal file
35
uni_modules/uni-getbatteryinfo/utssdk/unierror.uts
Normal file
@ -0,0 +1,35 @@
|
||||
import { GetBatteryInfoErrorCode, GetBatteryInfoFail } from "./interface.uts"
|
||||
/**
|
||||
* 错误主题
|
||||
*/
|
||||
export const UniErrorSubject = 'uni-getBatteryInfo';
|
||||
|
||||
|
||||
/**
|
||||
* 错误信息
|
||||
* @UniError
|
||||
*/
|
||||
export const UniErrors : Map<GetBatteryInfoErrorCode, string> = new Map([
|
||||
/**
|
||||
* 错误码及对应的错误信息
|
||||
*/
|
||||
[1001, 'getBatteryInfo:fail getAppContext is null'],
|
||||
[1002, 'getBatteryInfo:fail not support'],
|
||||
]);
|
||||
|
||||
|
||||
/**
|
||||
* 错误对象实现
|
||||
*/
|
||||
export class GetBatteryInfoFailImpl extends UniError implements GetBatteryInfoFail {
|
||||
override errCode : GetBatteryInfoErrorCode;
|
||||
/**
|
||||
* 错误对象构造函数
|
||||
*/
|
||||
constructor(errCode : GetBatteryInfoErrorCode) {
|
||||
super();
|
||||
this.errSubject = UniErrorSubject;
|
||||
this.errCode = errCode;
|
||||
this.errMsg = UniErrors[errCode] ?? "";
|
||||
}
|
||||
}
|
||||
23
uni_modules/uni-getbatteryinfo/utssdk/web/index.js
Normal file
23
uni_modules/uni-getbatteryinfo/utssdk/web/index.js
Normal file
@ -0,0 +1,23 @@
|
||||
export function getBatteryInfo(options) {
|
||||
if (navigator.getBattery) {
|
||||
navigator.getBattery().then(battery => {
|
||||
const res = {
|
||||
errCode: 0,
|
||||
errSubject: "uni-getBatteryInfo",
|
||||
errMsg: 'getBatteryInfo:ok',
|
||||
level: battery.level * 100,
|
||||
isCharging: battery.charging
|
||||
}
|
||||
options.success && options.success(res)
|
||||
options.complete && options.complete(res)
|
||||
})
|
||||
} else {
|
||||
const res = {
|
||||
errCode: 1002,
|
||||
errSubject: "uni-getBatteryInfo",
|
||||
errMsg: 'getBatteryInfo:fail navigator.getBattery is unsupported'
|
||||
}
|
||||
options.fail && options.fail(res)
|
||||
options.complete && options.complete(res)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user