在App Actions中,自定义意图只能使用动态实体和文本实体,动态实体用于在运行时检查参数,而日期时间参数不能用作动态实体。但是,可以使用静态模式匹配来解决此问题。静态模式匹配是使用前缀或后缀等模糊匹配技术,可以在没有完全匹配的情况下识别一些情况。
例如,如果你想在自定义意图中检索今天的日期,你可以使用以下代码:
private void handleMyCustomIntent() {
Intent intent = getIntent();
Bundle input = intent.getExtras();
if (input == null) {
return;
}
String query = input.getString("query") // e.g. "what's on today"
String[] keywords = {"today", "tomorrow", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
for (String keyword : keywords) {
if (query.contains(keyword)) {
Date date = getDateFromKeyword(keyword);
// Do something with the date
return;
}
}
}
private Date getDateFromKeyword(String keyword) {
GregorianCalendar calendar = new GregorianCalendar();
switch (keyword) {
case "today":
break;
case "tomorrow":
calendar.add(Calendar.DAY_OF_MONTH, 1);
break;
case "Monday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
break;
case "Tuesday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
break;
case "Wednesday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
break;
case "Thursday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
break;
case "Friday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
break;
case "Saturday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
break;
case "Sunday":
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
break;
}
return calendar.getTime();
}
在此示例中,我们将输入的字符串与包含关键字的数组进行匹配,并在找到匹配项时使用GregorianCalendar类获取日期。此方法仅适用于语言特定的关键字,如果你需要更复杂的日期计算,你需要相应调整代码。