新增AiCareScheduler.java,AI关怀调度器,负责规划和调度关怀任务,实现主动随机关怀 #40
Merged
pjao9fvxr
merged 2 commits from zhouzexin_branch into master 4 weeks ago
@ -0,0 +1,53 @@
|
||||
package net.micode.notes.tool.ai;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import java.util.Calendar;
|
||||
import java.util.Random;
|
||||
|
||||
public class AiCareScheduler {
|
||||
public static final String ACTION_AI_CARE = "net.micode.notes.ACTION_AI_CARE";
|
||||
|
||||
/**
|
||||
* 规划一整天的关怀任务
|
||||
* 建议在 App 启动或每天凌晨触发一次
|
||||
*/
|
||||
public static void scheduleDailyCare(Context context) {
|
||||
// 1. 设置固定时间点:早安 (07:30) 和 晚安 (22:30)
|
||||
setCareAlarm(context, 7, 30, "morning", 10001);
|
||||
setCareAlarm(context, 22, 30, "night", 10002);
|
||||
|
||||
// 2. 设置伪随机时间点:在 10:00 - 18:00 之间随机选 2 个点
|
||||
Random random = new Random();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
int hour = 10 + random.nextInt(8); // 10-17点
|
||||
int minute = random.nextInt(60);
|
||||
setCareAlarm(context, hour, minute, "random", 20001 + i);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setCareAlarm(Context context, int hour, int minute, String type, int requestCode) {
|
||||
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.set(Calendar.HOUR_OF_DAY, hour);
|
||||
cal.set(Calendar.MINUTE, minute);
|
||||
cal.set(Calendar.SECOND, 0);
|
||||
|
||||
// 如果设定的时间已经过了,就设为明天
|
||||
if (cal.getTimeInMillis() < System.currentTimeMillis()) {
|
||||
cal.add(Calendar.DAY_OF_YEAR, 1);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(context, AiReminderReceiver.class); // 复用 Receiver
|
||||
intent.setAction(ACTION_AI_CARE);
|
||||
intent.putExtra("care_type", type);
|
||||
|
||||
PendingIntent pi = PendingIntent.getBroadcast(context, requestCode, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
// 使用非精准闹钟即可(省电且不需要秒级精确)
|
||||
am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue