Android 是否提供 API 来确定可识别区域设置的周末?
Does Android provide an API for determining weekend days that is locale-aware?
我想为可识别工作日和周末的应用程序提供一些样式,但我需要它能够识别区域设置。我知道 Calendar#getFirstDayOfWeek
,但这只是 returns 一周的第一天,而不是工作周的第一天。
例如,英语(加拿大)Calendar#getFirstDayOfWeek
returns Calendar.SUNDAY
,这是我们一周的第一天。我们的工作周从 Calendar.MONDAY
开始,周末是 Calendar.SATURDAY
和 Calendar.SUNDAY
。
在英语(英国)中,Calendar#getFirstDayOfWeek
returns Calendar.MONDAY
,他们工作周的第一天是星期一。他们的周末是 Calendar.SATURDAY
和 Calendar.SUNDAY
.
对于像希伯来语这样的语言环境,事情变得棘手。他们一周的第一天是 Calendar.SUNDAY
,但他们工作周的第一天不是 Calendar.MONDAY
,而是 Calendar.SUNDAY
。他们的周末是 Calendar.FRIDAY
和 Calendar.SATURDAY
。埃及也一样。
伊朗只有一个周末,Calendar.FRIDAY
。
在Android中有没有什么方法可以确定周末?我们有一些涵盖大多数西方案例的逻辑,但它很脆弱,并且一个区域感知平台 API 将是理想的,但我不知道一个。
请注意,我并不是要对某些 "best" 图书馆或任何类似的东西提出建议。我想问 Android 平台上是否存在任何此类区域设置数据,如果存在,存在哪些 API 调用来访问此数据。
Awareness API 中有新发布的快照和围栏 API 用于您的 use-case locale-aware API 时间。
请查看 Awareness.SnapshotApi.getTimeIntervals,其中 return 是一个 TimeIntervalsResult。您可以调用 getTimeIntervals() 方法来 return 一个对象,该对象具有有关当前区域设置的当前时间属性的信息(特别是您要求的周末和假期)。
例如,以下代码片段检查在调用快照 api 时设备的区域设置是否是周末。
Awareness.SnapshotApi.getTimeIntervalsmGoogleApiClient)
.setResultCallback(new ResultCallback<TimeIntervalsResult>() {
@Override
public void onResult(@NonNull TimeIntervalsResult result) {
if (!result.getStatus().isSuccess()) {
Log.e(TAG, "Could not get the time intervals");
return;
}
if (result.getTimeIntervals().hasTimeInterval(
TimeFence.TIME_INTERVAL_WEEKEND)) {
// do your custom action, this means it is weekend at the
// device locale at this time
}
}
如果您希望您的应用在下周末或节假日在设备区域得到回调,您可以使用新的 TimeFence Api inTimeInterval()。比如借用开发者文档中的代码片段,
// Create TimeFence
AwarenessFence weekendHolidayFence = Awareness.or(
TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_WEEKEND),
TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_HOLIDAY))
Awareness.FenceApi.updateFences(
mGoogleApiClient,
new FenceUpdateRequest.Builder()
.addFence("fenceKey", weekendHolidayFence, myPendingIntent)
.build())
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.i(TAG, "Fence was successfully registered.");
} else {
Log.e(TAG, "Fence could not be registered: " + status);
}
}
});
我想为可识别工作日和周末的应用程序提供一些样式,但我需要它能够识别区域设置。我知道 Calendar#getFirstDayOfWeek
,但这只是 returns 一周的第一天,而不是工作周的第一天。
例如,英语(加拿大)Calendar#getFirstDayOfWeek
returns Calendar.SUNDAY
,这是我们一周的第一天。我们的工作周从 Calendar.MONDAY
开始,周末是 Calendar.SATURDAY
和 Calendar.SUNDAY
。
在英语(英国)中,Calendar#getFirstDayOfWeek
returns Calendar.MONDAY
,他们工作周的第一天是星期一。他们的周末是 Calendar.SATURDAY
和 Calendar.SUNDAY
.
对于像希伯来语这样的语言环境,事情变得棘手。他们一周的第一天是 Calendar.SUNDAY
,但他们工作周的第一天不是 Calendar.MONDAY
,而是 Calendar.SUNDAY
。他们的周末是 Calendar.FRIDAY
和 Calendar.SATURDAY
。埃及也一样。
伊朗只有一个周末,Calendar.FRIDAY
。
在Android中有没有什么方法可以确定周末?我们有一些涵盖大多数西方案例的逻辑,但它很脆弱,并且一个区域感知平台 API 将是理想的,但我不知道一个。
请注意,我并不是要对某些 "best" 图书馆或任何类似的东西提出建议。我想问 Android 平台上是否存在任何此类区域设置数据,如果存在,存在哪些 API 调用来访问此数据。
Awareness API 中有新发布的快照和围栏 API 用于您的 use-case locale-aware API 时间。
请查看 Awareness.SnapshotApi.getTimeIntervals,其中 return 是一个 TimeIntervalsResult。您可以调用 getTimeIntervals() 方法来 return 一个对象,该对象具有有关当前区域设置的当前时间属性的信息(特别是您要求的周末和假期)。
例如,以下代码片段检查在调用快照 api 时设备的区域设置是否是周末。
Awareness.SnapshotApi.getTimeIntervalsmGoogleApiClient)
.setResultCallback(new ResultCallback<TimeIntervalsResult>() {
@Override
public void onResult(@NonNull TimeIntervalsResult result) {
if (!result.getStatus().isSuccess()) {
Log.e(TAG, "Could not get the time intervals");
return;
}
if (result.getTimeIntervals().hasTimeInterval(
TimeFence.TIME_INTERVAL_WEEKEND)) {
// do your custom action, this means it is weekend at the
// device locale at this time
}
}
如果您希望您的应用在下周末或节假日在设备区域得到回调,您可以使用新的 TimeFence Api inTimeInterval()。比如借用开发者文档中的代码片段,
// Create TimeFence
AwarenessFence weekendHolidayFence = Awareness.or(
TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_WEEKEND),
TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_HOLIDAY))
Awareness.FenceApi.updateFences(
mGoogleApiClient,
new FenceUpdateRequest.Builder()
.addFence("fenceKey", weekendHolidayFence, myPendingIntent)
.build())
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.i(TAG, "Fence was successfully registered.");
} else {
Log.e(TAG, "Fence could not be registered: " + status);
}
}
});