android - Android 是否提供用于确定可识别区域设置的周末的 API?

标签 android calendar locale

我想为可识别工作日和周末的应用程序提供一些样式,但我需要它能够识别区域设置。我知道 Calendar#getFirstDayOfWeek,但这只返回一周的第一天,而不是工作周的第一天。

例如,对于英语(加拿大)Calendar#getFirstDayOfWeek 返回 Calendar.SUNDAY,这是我们一周的第一天。我们的工作周从 Calendar.MONDAY 开始,我们的周末是 Calendar.SATURDAYCalendar.SUNDAY

在英语(英国)中,Calendar#getFirstDayOfWeek 返回 Calendar.MONDAY,他们工作周的第一天是星期一。他们的周末是 Calendar.SATURDAYCalendar.SUNDAY

对于像希伯来语这样的语言环境,事情变得棘手。他们一周的第一天是 Calendar.SUNDAY,但他们工作周的第一天不是 Calendar.MONDAY,而是 Calendar.SUNDAY。他们的周末是 Calendar.FRIDAYCalendar.SATURDAY。埃及也是一样。

伊朗只有一个周末,Calendar.FRIDAY

Android 中有什么方法可以确定周末?我们有一些涵盖大多数西方案例的逻辑,但它很脆弱,并且一个区域设置感知平台 API 将是理想的,但我不知道一个。

请注意,我并不是要推荐一些“最佳”图书馆或任何类似的东西。我想问的是 Android 平台上是否存在任何此类区域设置数据,如果存在,存在哪些 API 调用来访问此数据。

最佳答案

Awareness API 中有新发布的快照和围栏 API,适用于 time 区域设置感知 API 的用例。

请看Awareness.SnapshotApi.getTimeIntervals它返回一个 TimeIntervalsResult。您可以调用 getTimeIntervals() 方法返回一个对象,该对象包含有关当前语言环境下当前时间(特别是您要求的周末和假期)的属性信息。

例如,以下代码 fragment 会检查在调用快照 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() .例如,借用开发者文档中的代码 fragment ,

// 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);
            }
        }
    });

关于android - Android 是否提供用于确定可识别区域设置的周末的 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403889/

相关文章:

安卓 fragment : crash on screen orientation change

android - 为什么页面没有加载到 android 的 webview 中

Android:在 Eclipse 中将用户库放到 AVD 上

java - 更新日历

python - django 中的强制语言代码

android - 修复平板电脑和手机屏幕的方向

c# - 如何从应用程序获取日期/约会到 Windows Phone 日历中?

Android 日历 "dtStart"返回未知值

bash - 如何更改 bash 中 printf 命令中的小数点分隔符?

php - 在 PHP 中检测客户端语言环境的最简单方法