diff --git a/src/Notes-master/src/net/micode/notes/tool/ai/AiCareScheduler.java b/src/Notes-master/src/net/micode/notes/tool/ai/AiCareScheduler.java new file mode 100644 index 0000000..202981f --- /dev/null +++ b/src/Notes-master/src/net/micode/notes/tool/ai/AiCareScheduler.java @@ -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); + } +} \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/ai/CozeApiService.java b/src/Notes-master/src/net/micode/notes/tool/ai/CozeApiService.java index 842da02..602891c 100644 --- a/src/Notes-master/src/net/micode/notes/tool/ai/CozeApiService.java +++ b/src/Notes-master/src/net/micode/notes/tool/ai/CozeApiService.java @@ -1,18 +1,31 @@ package net.micode.notes.tool.ai; +import com.google.gson.JsonObject; + import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.POST; +import retrofit2.http.Query; public interface CozeApiService { - /** - * 发起智能体对话 - * 对应文档:https://www.coze.cn/open/docs/developer_guides/chat - */ @POST("v3/chat") - Call chat( + Call chat(@Header("Authorization") String token, @Body CozeRequest request); + + // [核心修复] 轮询接口:使用 Query 参数传递 IDs + @POST("v3/chat/retrieve") + Call retrieveChat( + @Header("Authorization") String token, + @Query("chat_id") String chatId, + @Query("conversation_id") String conversationId + ); + + // [核心新增] 获取消息列表:用于抓取 AI 的文本回复 + @GET("v3/chat/message/list") + Call getMessageList( @Header("Authorization") String token, - @Body CozeRequest request + @Query("chat_id") String chatId, + @Query("conversation_id") String conversationId ); } \ No newline at end of file diff --git a/src/Notes-master/src/net/micode/notes/tool/ai/CozeResponse.java b/src/Notes-master/src/net/micode/notes/tool/ai/CozeResponse.java index 0aa9010..0423e6f 100644 --- a/src/Notes-master/src/net/micode/notes/tool/ai/CozeResponse.java +++ b/src/Notes-master/src/net/micode/notes/tool/ai/CozeResponse.java @@ -14,13 +14,8 @@ public class CozeResponse { public ChatData data; public static class ChatData { - @SerializedName("id") - public String id; // 会话ID - - @SerializedName("status") - public String status; // 状态:completed, in_progress等 - - // 注意:非流式模式下,回复通常在后续的消息查询中或特定的 V3 响应字段中 - // 为了简化 Demo,我们假设智能体立即返回了结果 + public String id; // chat_id + public String conversation_id; // [核心修复] 必须添加此字段 + public String status; } } \ No newline at end of file