feat: 添加驾驶数据存储功能并优化相关逻辑
This commit is contained in:
parent
db2b9abcca
commit
8ba301348d
@ -8,6 +8,7 @@ import AbilityConstant from '@ohos.app.ability.AbilityConstant';
|
|||||||
import { BaseInfoType, CarInfoType, ExaminerInfoType } from '../model';
|
import { BaseInfoType, CarInfoType, ExaminerInfoType } from '../model';
|
||||||
import { tcpUtil } from '../utils/TcpRequest';
|
import { tcpUtil } from '../utils/TcpRequest';
|
||||||
import DB from '../utils/DbSql';
|
import DB from '../utils/DbSql';
|
||||||
|
import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
|
||||||
|
|
||||||
export default class EntryAbility extends UIAbility {
|
export default class EntryAbility extends UIAbility {
|
||||||
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
|
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
|
||||||
@ -28,6 +29,7 @@ export default class EntryAbility extends UIAbility {
|
|||||||
const arrClose = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00]
|
const arrClose = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00]
|
||||||
// TODO UDP缺失
|
// TODO UDP缺失
|
||||||
// globalThis?.lightLineUdp?.send(arrCloseBuffer);
|
// globalThis?.lightLineUdp?.send(arrCloseBuffer);
|
||||||
|
DrivingDataStorage.close()
|
||||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
|
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,6 @@ import common from '@ohos.app.ability.common';
|
|||||||
import router from '@ohos.router';
|
import router from '@ohos.router';
|
||||||
|
|
||||||
import { getEsCarModel, getSyncData, } from '../common/service/initable';
|
import { getEsCarModel, getSyncData, } from '../common/service/initable';
|
||||||
import { getUDP, getUDP2 } from '../common/utils/GlobalUdp';
|
|
||||||
import { initJudgeUdp } from '../common/utils/UdpJudge';
|
import { initJudgeUdp } from '../common/utils/UdpJudge';
|
||||||
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
||||||
import { getTCP } from '../common/utils/GlobalTcp';
|
import { getTCP } from '../common/utils/GlobalTcp';
|
||||||
@ -22,10 +21,10 @@ import { GetSyncData, InitializeTheCentralTable } from '../utils/table/Operation
|
|||||||
import { BusinessError } from '@ohos.base';
|
import { BusinessError } from '@ohos.base';
|
||||||
import { delPic } from '../utils/Video';
|
import { delPic } from '../utils/Video';
|
||||||
import { FileHelper } from '../utils/FileHelp';
|
import { FileHelper } from '../utils/FileHelp';
|
||||||
import GetDistance from '../utils/business/GetDistance';
|
import { GetCurrentTime } from '../utils/Common';
|
||||||
import { GetCurrentTime, NumberToByteArray } from '../utils/Common';
|
|
||||||
import { ObtainSignalData } from '../utils/business/ObtainSignalData';
|
import { ObtainSignalData } from '../utils/business/ObtainSignalData';
|
||||||
import { CentralHeartbeat } from '../utils/business/CentralHeartbeat';
|
import { CentralHeartbeat } from '../utils/business/CentralHeartbeat';
|
||||||
|
import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
|
||||||
|
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@ -494,7 +493,7 @@ struct Index {
|
|||||||
|
|
||||||
async createAlbum() {
|
async createAlbum() {
|
||||||
this.fileHelper = new FileHelper();
|
this.fileHelper = new FileHelper();
|
||||||
const time = await GetCurrentTime()
|
const time = GetCurrentTime()
|
||||||
const date = time.split(' ')[0]
|
const date = time.split(' ')[0]
|
||||||
this.fileHelper.createAlbum('jt')
|
this.fileHelper.createAlbum('jt')
|
||||||
// this.fileHelper.createAlbum('2025-01-02')
|
// this.fileHelper.createAlbum('2025-01-02')
|
||||||
@ -507,7 +506,7 @@ struct Index {
|
|||||||
// await getUDP(this.context, false)
|
// await getUDP(this.context, false)
|
||||||
ObtainSignalData.init();
|
ObtainSignalData.init();
|
||||||
CentralHeartbeat.init();
|
CentralHeartbeat.init();
|
||||||
CentralHeartbeat.getData((data:centerCallBackMsgType)=>{
|
CentralHeartbeat.getData((data: centerCallBackMsgType) => {
|
||||||
if (data.id == 32) {
|
if (data.id == 32) {
|
||||||
AppStorage.setOrCreate('signNum', data.body[1])
|
AppStorage.setOrCreate('signNum', data.body[1])
|
||||||
}
|
}
|
||||||
@ -522,14 +521,15 @@ struct Index {
|
|||||||
// await setCurrentTime();
|
// await setCurrentTime();
|
||||||
await SetCurrentTime()
|
await SetCurrentTime()
|
||||||
this.timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
|
this.timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
|
||||||
const distanceClass = AppStorage.get<boolean>('distanceClass')
|
// const distanceClass = AppStorage.get<boolean>('distanceClass')
|
||||||
if (!distanceClass) {
|
// if (!distanceClass) {
|
||||||
const distanceClass = new GetDistance(this.context)
|
// const distanceClass = new GetDistance(this.context)
|
||||||
await distanceClass.initFolder()
|
// await distanceClass.initFolder()
|
||||||
AppStorage.setOrCreate('distanceClass', distanceClass)
|
// AppStorage.setOrCreate('distanceClass', distanceClass)
|
||||||
console.info('surenjun', 'distanceClass=>初始化完成')
|
// console.info('surenjun', 'distanceClass=>初始化完成')
|
||||||
}
|
// }
|
||||||
|
DrivingDataStorage.init(this.context)
|
||||||
|
DrivingDataStorage.initializeTheDrivingDataFolder()
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.initParamFlag = true
|
this.initParamFlag = true
|
||||||
}, 3000)
|
}, 3000)
|
||||||
|
|||||||
@ -14,24 +14,26 @@ import { LANE } from '../judgeSDK/api/judgeSDK.d';
|
|||||||
import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
|
import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getCarStatus, getCenterProjectStatus, plcStrToJson,
|
getCarStatus,
|
||||||
plcStrToWXJson,
|
getCenterProjectStatus,
|
||||||
promptWxCode
|
plcStrToJson,
|
||||||
|
plcStrToWXJson,
|
||||||
|
promptWxCode
|
||||||
} from './utils/judgeCommon';
|
} from './utils/judgeCommon';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
examCalcGpsDistance,
|
examCalcGpsDistance,
|
||||||
examJudgeArtificialItem,
|
examJudgeArtificialItem,
|
||||||
examJudgeArtificialMark,
|
examJudgeArtificialMark,
|
||||||
examJudgeBeginExam,
|
examJudgeBeginExam,
|
||||||
examJudgeEndExam,
|
examJudgeEndExam,
|
||||||
examJudgeInit,
|
examJudgeInit,
|
||||||
examJudgeRealExam,
|
examJudgeRealExam,
|
||||||
examJudgeSetLogCallback,
|
examJudgeSetLogCallback,
|
||||||
examJudgeSetPerformCallback,
|
examJudgeSetPerformCallback,
|
||||||
examJudgeSetRealExamCallback,
|
examJudgeSetRealExamCallback,
|
||||||
examJudgeSoundEnd,
|
examJudgeSoundEnd,
|
||||||
examJudgeVersion
|
examJudgeVersion
|
||||||
} from './api/index';
|
} from './api/index';
|
||||||
|
|
||||||
import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
|
import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
|
||||||
@ -42,36 +44,38 @@ import { GetCurrentTime } from '../../utils/Common';
|
|||||||
import UsbService from '../../utils/USB';
|
import UsbService from '../../utils/USB';
|
||||||
import FileUtils from '../../utils/FileUtils';
|
import FileUtils from '../../utils/FileUtils';
|
||||||
import {
|
import {
|
||||||
BaseInfoType,
|
BaseInfoType,
|
||||||
CarInfoType,
|
CarInfoType,
|
||||||
CDSBInfo,
|
CDSBInfo,
|
||||||
DistanceClass,
|
DrvexamType,
|
||||||
DrvexamType,
|
ExaminerInfoType,
|
||||||
ExaminerInfoType,
|
ItemInfo,
|
||||||
ItemInfo,
|
JudgeBeginObj,
|
||||||
JudgeBeginObj,
|
JudgeCallBackData,
|
||||||
JudgeCallBackData,
|
JudgeConfigObj,
|
||||||
JudgeConfigObj,
|
JudgeEventKf,
|
||||||
JudgeEventKf,
|
JudgeInitObj,
|
||||||
JudgeInitObj,
|
JudgeKfxm,
|
||||||
JudgeKfxm,
|
JudgeKsjs,
|
||||||
JudgeKsjs,
|
JudgeKsxm,
|
||||||
JudgeKsxm,
|
JudgePerformInfo,
|
||||||
JudgePerformInfo,
|
JudgeSound,
|
||||||
JudgeSound, JudgeUI,
|
JudgeUI,
|
||||||
JudgeXmjs,
|
JudgeXmjs,
|
||||||
Km3JudgeInitConfig,
|
Km3JudgeInitConfig,
|
||||||
KmItem,
|
KmItem,
|
||||||
KmItems, MarkRule,
|
KmItems,
|
||||||
Plc,
|
MarkRule,
|
||||||
ProjectInfo,
|
Plc,
|
||||||
RecordHandleType,
|
ProjectInfo,
|
||||||
RegulatoryInterfaceParams,
|
RecordHandleType,
|
||||||
RouteParamsType,
|
RegulatoryInterfaceParams,
|
||||||
TKmItem,
|
RouteParamsType,
|
||||||
User,
|
TKmItem,
|
||||||
WR
|
User,
|
||||||
|
WR
|
||||||
} from '../../model';
|
} from '../../model';
|
||||||
|
import { DrivingDataStorage } from '../../utils/business/DrivingDataStorage';
|
||||||
|
|
||||||
const judgeTag = 'SURENJUN_JUDGE'
|
const judgeTag = 'SURENJUN_JUDGE'
|
||||||
|
|
||||||
@ -297,8 +301,9 @@ export default class Judge {
|
|||||||
wd2: tWD,
|
wd2: tWD,
|
||||||
h: (this.tempData.gps.hxj) || 1,
|
h: (this.tempData.gps.hxj) || 1,
|
||||||
})
|
})
|
||||||
const distanceClass = AppStorage.get<DistanceClass>('distanceClass')
|
// const distanceClass = AppStorage.get<DistanceClass>('distanceClass')
|
||||||
distanceClass?.setTimeData(Number(((distance / 100).toFixed(2))))
|
// distanceClass?.setTimeData(Number(((distance / 100).toFixed(2))))
|
||||||
|
DrivingDataStorage.setDrivingProcessData(Number(((distance / 100).toFixed(2))))
|
||||||
}
|
}
|
||||||
this.prevJd = tJD;
|
this.prevJd = tJD;
|
||||||
this.prevWd = tWD;
|
this.prevWd = tWD;
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
import common from "@ohos.app.ability.common";
|
|
||||||
|
|
||||||
// export default class FileUtil {
|
|
||||||
// private context: common.UIAbilityContext
|
|
||||||
//
|
|
||||||
// constructor() {
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 创建文件夹
|
|
||||||
//
|
|
||||||
// // 创建并覆盖文件
|
|
||||||
//
|
|
||||||
// // 创建或者编辑文件
|
|
||||||
// // 关闭文件
|
|
||||||
// // 读取文件
|
|
||||||
// // 删除文件夹或者文件1:文件夹 2:文件 3:自定义目录下文件
|
|
||||||
// }
|
|
||||||
@ -1,291 +0,0 @@
|
|||||||
import media from '@ohos.multimedia.media';
|
|
||||||
import common from '@ohos.app.ability.common';
|
|
||||||
import fs from '@ohos.file.fs';
|
|
||||||
|
|
||||||
export enum PlayStatus {
|
|
||||||
/**
|
|
||||||
* 闲置状态, Player刚被创建或者调用了reset方法之后, 进入该状态, 触发idle回调事件
|
|
||||||
*/
|
|
||||||
Idle,
|
|
||||||
/**
|
|
||||||
* 资源初始化, 调用setSource进入该状态, 触发initialized回调事件
|
|
||||||
*/
|
|
||||||
Init,
|
|
||||||
/**
|
|
||||||
* 已准备状态, 在Init状态调用prepare方法后进入该状态, 触发prepared回调事件
|
|
||||||
*/
|
|
||||||
Prepared,
|
|
||||||
/**
|
|
||||||
* 正在播放状态, Prepared/Paused/Completed状态调用play方法进入该状态, 触发playing回调事件
|
|
||||||
*/
|
|
||||||
Playing,
|
|
||||||
/**
|
|
||||||
* 暂停状态, 在Playing状态调用pause方法进入该状态, 触发paused回调事件
|
|
||||||
*/
|
|
||||||
Paused,
|
|
||||||
/**
|
|
||||||
* 播放至结尾状态, loop为false时播放到结尾进入该状态, 此时调用play会进入Playing状态和重播, 调用stop进入Stopped状态, 触发completed回调
|
|
||||||
*/
|
|
||||||
Completed,
|
|
||||||
/**
|
|
||||||
* 停止状态, Prepared/Playing/Paused/Completed状态调用stop方法进入该状态, 触发stopped回调
|
|
||||||
*/
|
|
||||||
Stopped,
|
|
||||||
/**
|
|
||||||
* 销毁状态, 调用release方法后进入该状态, 触发released回调
|
|
||||||
*/
|
|
||||||
Released,
|
|
||||||
/**
|
|
||||||
* 错误状态, 当播放引擎发生不可逆的错误进入该状态, 可以调用reset重置, 也可以调用release销毁重建, 触发error回调
|
|
||||||
*/
|
|
||||||
Error
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PlayerOption {
|
|
||||||
mode: "audio" | "video"
|
|
||||||
loop: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export type PlayerSourceType = "network" | "raw" | "local"
|
|
||||||
|
|
||||||
type PlayerEvent = media.AVPlayerState | "status"
|
|
||||||
|
|
||||||
interface PlayerSourceOption {
|
|
||||||
/**
|
|
||||||
* 资源类型 默认为network:网络类型, raw:app预置到resource/rawfile的文件, local:应用沙箱内文件
|
|
||||||
*/
|
|
||||||
type?: PlayerSourceType
|
|
||||||
/**
|
|
||||||
* type为network时, 传入网络url type为raw时, 传入相对路径 type为local时, 传入沙箱相对路径
|
|
||||||
*/
|
|
||||||
url: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export class MediaPlayer {
|
|
||||||
private context: common.UIAbilityContext
|
|
||||||
private player?: media.AVPlayer
|
|
||||||
private option: PlayerOption = {
|
|
||||||
mode: "video",
|
|
||||||
loop: false
|
|
||||||
}
|
|
||||||
private callback: Map<PlayerEvent, Function[]> = new Map()
|
|
||||||
|
|
||||||
constructor(context: common.UIAbilityContext, option?: Partial<PlayerOption>) {
|
|
||||||
this.context = context
|
|
||||||
this.option.mode = option?.mode || "video"
|
|
||||||
this.option.loop = option?.loop || false
|
|
||||||
}
|
|
||||||
|
|
||||||
private _status: PlayStatus = PlayStatus.Idle
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前播放器状态
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
get status() {
|
|
||||||
return this._status
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取媒体资源长度
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
get duration() {
|
|
||||||
return this.player?.duration ?? 0
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取媒体资源当前播放进度
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
get current() {
|
|
||||||
return this.player?.currentTime ?? 0
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置avplayer输出控件id 仅播放视频需要
|
|
||||||
* @param id
|
|
||||||
*/
|
|
||||||
set surfaceId(id: string) {
|
|
||||||
this.player!.surfaceId = id
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置播放音量
|
|
||||||
* @param volume
|
|
||||||
*/
|
|
||||||
set volume(volume: number) {
|
|
||||||
this.player?.setVolume(volume)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置是否循环播放
|
|
||||||
* @param loop
|
|
||||||
*/
|
|
||||||
set loop(loop: boolean) {
|
|
||||||
if ([PlayStatus.Prepared, PlayStatus.Playing, PlayStatus.Paused, PlayStatus.Completed].includes(this._status)) {
|
|
||||||
this.player!.loop = loop
|
|
||||||
}
|
|
||||||
this.option.loop = loop
|
|
||||||
}
|
|
||||||
|
|
||||||
async create() {
|
|
||||||
this.player = await media.createAVPlayer()
|
|
||||||
this.registerPlayerCallback()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置播放资源
|
|
||||||
* @param option
|
|
||||||
*/
|
|
||||||
async setSource(option: PlayerSourceOption) {
|
|
||||||
let fdPath = 'fd://';
|
|
||||||
if (option.type === "raw") {
|
|
||||||
let fileDescriptor = await this.context.resourceManager.getRawFd(option.url)
|
|
||||||
this.player!.fdSrc = fileDescriptor
|
|
||||||
} else if (option.type === "local") {
|
|
||||||
let path = this.context.filesDir + option.url;
|
|
||||||
let file = fs.openSync(path)
|
|
||||||
this.player!.url = fdPath + file.fd
|
|
||||||
} else {
|
|
||||||
this.player!.url = option.url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async prepare() {
|
|
||||||
await this.player?.prepare()
|
|
||||||
}
|
|
||||||
|
|
||||||
async play() {
|
|
||||||
await this.player?.play()
|
|
||||||
}
|
|
||||||
|
|
||||||
async pause() {
|
|
||||||
await this.player?.pause()
|
|
||||||
}
|
|
||||||
|
|
||||||
async stop() {
|
|
||||||
await this.player?.stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
async reset() {
|
|
||||||
await this.player?.reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
async release() {
|
|
||||||
await this.player?.release()
|
|
||||||
this.callback.clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
seek(time: number, mode?: media.SeekMode) {
|
|
||||||
this.player?.seek(time, mode || media.SeekMode.SEEK_PREV_SYNC)
|
|
||||||
}
|
|
||||||
|
|
||||||
speed(speed: media.PlaybackSpeed) {
|
|
||||||
this.player?.setSpeed(speed)
|
|
||||||
}
|
|
||||||
|
|
||||||
on(type: PlayerEvent, cb: Function) {
|
|
||||||
if (!this.callback.has(type)) {
|
|
||||||
this.callback.set(type, [])
|
|
||||||
}
|
|
||||||
this.callback.get(type)?.push(cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
once(type: PlayerEvent, cb: Function) {
|
|
||||||
let onceFn = () => {
|
|
||||||
cb()
|
|
||||||
this.off(type, onceFn)
|
|
||||||
}
|
|
||||||
this.on(type, onceFn)
|
|
||||||
}
|
|
||||||
|
|
||||||
off(type: PlayerEvent, cb: Function) {
|
|
||||||
if (!this.callback.has(type)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let cbs = this.callback.get(type)
|
|
||||||
cbs = cbs?.filter(el => el != cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
private registerPlayerCallback() {
|
|
||||||
this.player?.on("stateChange", (state, reason) => {
|
|
||||||
switch (state) {
|
|
||||||
case "idle": {
|
|
||||||
this._status = PlayStatus.Idle
|
|
||||||
this.callback.get("idle")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "initialized": {
|
|
||||||
this._status = PlayStatus.Init
|
|
||||||
this.callback.get("initialized")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
this.prepare()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "prepared": {
|
|
||||||
this._status = PlayStatus.Prepared
|
|
||||||
this.loop = this.option.loop
|
|
||||||
this.callback.get("prepared")?.forEach(cb => {
|
|
||||||
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "playing": {
|
|
||||||
this._status = PlayStatus.Playing
|
|
||||||
this.loop = this.option.loop
|
|
||||||
this.callback.get("playing")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "paused": {
|
|
||||||
this._status = PlayStatus.Paused
|
|
||||||
this.loop = this.option.loop
|
|
||||||
this.callback.get("paused")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "completed": {
|
|
||||||
this._status = PlayStatus.Completed
|
|
||||||
this.loop = this.option.loop
|
|
||||||
this.callback.get("completed")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "stopped": {
|
|
||||||
this._status = PlayStatus.Stopped
|
|
||||||
this.callback.get("stopped")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "released": {
|
|
||||||
this._status = PlayStatus.Released
|
|
||||||
this.callback.get("released")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case "error": {
|
|
||||||
this._status = PlayStatus.Error
|
|
||||||
this.callback.get("error")?.forEach(cb => {
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
break
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
this.callback.get("status")?.forEach(cb => {
|
|
||||||
cb(this._status, reason)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
import dataPreferences from '@ohos.data.preferences';
|
|
||||||
|
|
||||||
let preference: dataPreferences.Preferences;
|
|
||||||
const SYSTEM_DB: string = 'system.db'
|
|
||||||
let context = getContext(this);
|
|
||||||
|
|
||||||
class PreferenceUtils {
|
|
||||||
async writeData(value: dataPreferences.ValueType, key: string) {
|
|
||||||
// if (value === null) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
if (!preference) {
|
|
||||||
await this.getPreferencesFromStorage(SYSTEM_DB);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
await preference.put(key, value);
|
|
||||||
} catch (err) {
|
|
||||||
console.info(`Failed to put value, Cause: ${err}`);
|
|
||||||
}
|
|
||||||
await preference.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取其他缓存数据
|
|
||||||
async getData<T extends dataPreferences.ValueType>(key: string) {
|
|
||||||
let value: dataPreferences.ValueType = 1;
|
|
||||||
if (!preference) {
|
|
||||||
await this.getPreferencesFromStorage(SYSTEM_DB);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
value = (await preference.get(key, ''));
|
|
||||||
} catch (err) {
|
|
||||||
console.info(`Failed to get value, Cause: ${err}`);
|
|
||||||
}
|
|
||||||
if (value === '') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return value as T;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建登录数据preference
|
|
||||||
async getPreferencesFromStorage(name: string) {
|
|
||||||
try {
|
|
||||||
preference = await dataPreferences.getPreferences(context, name);
|
|
||||||
} catch (err) {
|
|
||||||
console.info(`Failed to get preferences, Cause: ${err}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default new PreferenceUtils();
|
|
||||||
54
entry/src/main/ets/utils/business/DrivingDataStorage.ets
Normal file
54
entry/src/main/ets/utils/business/DrivingDataStorage.ets
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import common from '@ohos.app.ability.common';
|
||||||
|
import dayTs from '../Date';
|
||||||
|
import FileUtils from '../FileUtils';
|
||||||
|
|
||||||
|
class drivingDataStorage {
|
||||||
|
public folderPath: string
|
||||||
|
public time: string
|
||||||
|
public totalDistance: number
|
||||||
|
public totalTime: number
|
||||||
|
public date: string
|
||||||
|
public fd: number
|
||||||
|
private fileUtil: FileUtils
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化文件夹
|
||||||
|
async initializeTheDrivingDataFolder() {
|
||||||
|
const folderPath = await this.fileUtil.initFolder(`/车辆行驶距离统计`);
|
||||||
|
this.time = dayTs().format("HH:mm:ss")
|
||||||
|
this.date = dayTs().format("YYYY_MM_DD")
|
||||||
|
this.folderPath = folderPath;
|
||||||
|
this.totalDistance = 0;
|
||||||
|
this.totalTime = 0;
|
||||||
|
this.fd = await this.fileUtil.editFile(
|
||||||
|
`${folderPath}/${this.date}.txt`,
|
||||||
|
`程序启动时间:${this.time} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`)
|
||||||
|
return folderPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置行驶过程数据
|
||||||
|
async setDrivingProcessData(str: number) {
|
||||||
|
const content = await this.fileUtil.readFile(`${this.folderPath}/${this.date}.txt`) || '';
|
||||||
|
const contentArr = content.split('\n').filter(item => item)
|
||||||
|
this.totalDistance += (str * 1 > 200 ? 200 : str * 1)
|
||||||
|
this.totalTime += 1;
|
||||||
|
contentArr[contentArr.length - 1] =
|
||||||
|
`程序启动时间:${this.time} 累计行驶距离:${(this.totalDistance).toFixed(2)}m 累计运行时常:${Math.ceil(this.totalTime /
|
||||||
|
60)}min` + '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
public init(context: common.UIAbilityContext) {
|
||||||
|
this.fileUtil = new FileUtils(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭文件读写
|
||||||
|
public close() {
|
||||||
|
this.fileUtil.closeFile(`${this.folderPath}/${this.date}.txt`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const DrivingDataStorage = new drivingDataStorage()
|
||||||
@ -14,7 +14,7 @@ export default class GetDistance {
|
|||||||
private fileUtil: FileUtils
|
private fileUtil: FileUtils
|
||||||
// 设置文件夹
|
// 设置文件夹
|
||||||
public initFolder = async () => {
|
public initFolder = async () => {
|
||||||
const time = await GetCurrentTime()
|
const time = GetCurrentTime()
|
||||||
const folderPath = await this.fileUtil.initFolder(`/车辆行驶距离统计`);
|
const folderPath = await this.fileUtil.initFolder(`/车辆行驶距离统计`);
|
||||||
console.info('surenjun folderPath=>', folderPath);
|
console.info('surenjun folderPath=>', folderPath);
|
||||||
const date = time.split(' ')[0].split('-').join('_')
|
const date = time.split(' ')[0].split('-').join('_')
|
||||||
@ -26,8 +26,7 @@ export default class GetDistance {
|
|||||||
this.date = date;
|
this.date = date;
|
||||||
this.fd = await this.fileUtil.editFile(
|
this.fd = await this.fileUtil.editFile(
|
||||||
`${folderPath}/${date}.txt`,
|
`${folderPath}/${date}.txt`,
|
||||||
`程序启动时间:${timeStr} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`, this.fd
|
`程序启动时间:${timeStr} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`);
|
||||||
);
|
|
||||||
return folderPath
|
return folderPath
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,9 +35,9 @@ export default class GetDistance {
|
|||||||
this.fileUtil = fileUtil;
|
this.fileUtil = fileUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 过程文件数据
|
// 过程文件数据
|
||||||
public setTimeData = async (str: number) => {
|
public setTimeData = async (str: number) => {
|
||||||
// const { fileUtil, folderPath, timeStr, date, totalDistance } = this;
|
|
||||||
console.log('folderPath', this.folderPath)
|
console.log('folderPath', this.folderPath)
|
||||||
const content = await this.fileUtil.readFile(`${this.folderPath}/${this.date}.txt`) || '';
|
const content = await this.fileUtil.readFile(`${this.folderPath}/${this.date}.txt`) || '';
|
||||||
const contentArr = content.split('\n').filter(item => item)
|
const contentArr = content.split('\n').filter(item => item)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user