feat: 添加睡眠详情页面,集成睡眠数据获取功能,优化健康数据权限管理,更新相关组件以支持睡眠统计和展示
This commit is contained in:
@@ -5,17 +5,11 @@ import * as BackgroundTask from 'expo-background-task';
|
||||
import * as TaskManager from 'expo-task-manager';
|
||||
import { TaskManagerTaskBody } from 'expo-task-manager';
|
||||
|
||||
/**
|
||||
* 后台任务标识符
|
||||
*/
|
||||
export const BACKGROUND_TASK_IDS = {
|
||||
WATER_REMINDER: 'water-reminder-task',
|
||||
STAND_REMINDER: 'stand-reminder-task',
|
||||
HEALTH_REMINDERS: 'background-health-reminders',
|
||||
} as const;
|
||||
const BACKGROUND_TASK_IDENTIFIER = 'background-task';
|
||||
|
||||
|
||||
// 定义后台任务
|
||||
TaskManager.defineTask(BACKGROUND_TASK_IDS.HEALTH_REMINDERS, async (body: TaskManagerTaskBody) => {
|
||||
TaskManager.defineTask(BACKGROUND_TASK_IDENTIFIER, async (body: TaskManagerTaskBody) => {
|
||||
try {
|
||||
console.log('[BackgroundTask] 后台任务执行');
|
||||
await executeBackgroundTasks();
|
||||
@@ -209,9 +203,7 @@ export class BackgroundTaskManager {
|
||||
|
||||
try {
|
||||
// 注册后台任务
|
||||
const status = await BackgroundTask.registerTaskAsync(BACKGROUND_TASK_IDS.HEALTH_REMINDERS, {
|
||||
minimumInterval: 15, // 15分钟
|
||||
});
|
||||
const status = await BackgroundTask.registerTaskAsync(BACKGROUND_TASK_IDENTIFIER);
|
||||
|
||||
console.log('[BackgroundTask] 配置状态:', status);
|
||||
|
||||
@@ -226,26 +218,13 @@ export class BackgroundTaskManager {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 启动后台任务
|
||||
*/
|
||||
async start(): Promise<void> {
|
||||
try {
|
||||
await BackgroundTask.registerTaskAsync(BACKGROUND_TASK_IDS.HEALTH_REMINDERS, {
|
||||
minimumInterval: 15,
|
||||
});
|
||||
console.log('后台任务已启动');
|
||||
} catch (error) {
|
||||
console.error('启动后台任务失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止后台任务
|
||||
*/
|
||||
async stop(): Promise<void> {
|
||||
try {
|
||||
await BackgroundTask.unregisterTaskAsync(BACKGROUND_TASK_IDS.HEALTH_REMINDERS);
|
||||
await BackgroundTask.unregisterTaskAsync(BACKGROUND_TASK_IDENTIFIER);
|
||||
console.log('后台任务已停止');
|
||||
} catch (error) {
|
||||
console.error('停止后台任务失败:', error);
|
||||
@@ -281,6 +260,11 @@ export class BackgroundTaskManager {
|
||||
}
|
||||
}
|
||||
|
||||
async triggerTaskForTesting(): Promise<void> {
|
||||
await BackgroundTask.triggerTaskWorkerForTestingAsync();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 测试后台任务
|
||||
*/
|
||||
@@ -296,42 +280,6 @@ export class BackgroundTaskManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册喝水提醒后台任务
|
||||
*/
|
||||
async registerWaterReminderTask(): Promise<void> {
|
||||
console.log('注册喝水提醒后台任务...');
|
||||
|
||||
try {
|
||||
// 检查是否已经初始化
|
||||
if (!this.isInitialized) {
|
||||
await this.initialize();
|
||||
}
|
||||
|
||||
// 启动后台任务
|
||||
await this.start();
|
||||
|
||||
console.log('喝水提醒后台任务注册成功');
|
||||
} catch (error) {
|
||||
console.error('注册喝水提醒后台任务失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消喝水提醒后台任务
|
||||
*/
|
||||
async unregisterWaterReminderTask(): Promise<void> {
|
||||
console.log('取消喝水提醒后台任务...');
|
||||
|
||||
try {
|
||||
await this.stop();
|
||||
console.log('喝水提醒后台任务已取消');
|
||||
} catch (error) {
|
||||
console.error('取消喝水提醒后台任务失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最后一次后台检查时间
|
||||
@@ -345,73 +293,6 @@ export class BackgroundTaskManager {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册站立提醒后台任务
|
||||
*/
|
||||
async registerStandReminderTask(): Promise<void> {
|
||||
console.log('注册站立提醒后台任务...');
|
||||
|
||||
try {
|
||||
// 检查是否已经初始化
|
||||
if (!this.isInitialized) {
|
||||
await this.initialize();
|
||||
}
|
||||
|
||||
// 启动后台任务
|
||||
await this.start();
|
||||
|
||||
console.log('站立提醒后台任务注册成功');
|
||||
} catch (error) {
|
||||
console.error('注册站立提醒后台任务失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消站立提醒后台任务
|
||||
*/
|
||||
async unregisterStandReminderTask(): Promise<void> {
|
||||
console.log('取消站立提醒后台任务...');
|
||||
|
||||
try {
|
||||
// 取消所有相关通知
|
||||
await StandReminderHelpers.cancelStandReminders();
|
||||
console.log('站立提醒后台任务已取消');
|
||||
} catch (error) {
|
||||
console.error('取消站立提醒后台任务失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最后一次站立检查时间
|
||||
*/
|
||||
async getLastStandCheckTime(): Promise<number | null> {
|
||||
try {
|
||||
const lastCheck = await AsyncStorage.getItem('@last_background_stand_check');
|
||||
return lastCheck ? parseInt(lastCheck) : null;
|
||||
} catch (error) {
|
||||
console.error('获取最后站立检查时间失败:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试站立提醒任务
|
||||
*/
|
||||
async testStandReminderTask(): Promise<void> {
|
||||
console.log('开始测试站立提醒后台任务...');
|
||||
|
||||
try {
|
||||
// 手动触发站立提醒任务执行
|
||||
await executeStandReminderTask();
|
||||
console.log('站立提醒后台任务测试完成');
|
||||
} catch (error) {
|
||||
console.error('站立提醒后台任务测试失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user