android - Android 中的 "Notification"和 "Attention"有什么区别?

标签 android android-service android-source android-notifications

我正在学习 android 源代码并研究了 LightsService 框架。

我知道这些编码因设备而异。但是我在看到以下代码时感到困惑。

static int set_light_leds(struct light_state_t const *state, int type)
{
        struct an30259a_pr_control led;

        memset(&led, 0, sizeof(led));

        switch (state->flashMode) {
        case LIGHT_FLASH_NONE:
                led.state = LED_LIGHT_OFF;
                break;
        case LIGHT_FLASH_TIMED:
        case LIGHT_FLASH_HARDWARE:
                led.state = LED_LIGHT_SLOPE;
                led.color = state->color & 0x00ffffff;
                // tweak to eliminate purplish tint from white color
                if (led.color == 0x00ffffff)
                    led.color = 0x80ff80;
                // scale slope times based on flashOnMS
                led.time_slope_up_1 = (SLOPE_UP_1 * state->flashOnMS) / 1000;
                led.time_slope_up_2 = (SLOPE_UP_2 * state->flashOnMS) / 1000;
                led.time_slope_down_1 = (SLOPE_DOWN_1 * state->flashOnMS) / 1000;
                led.time_slope_down_2 = (SLOPE_DOWN_2 * state->flashOnMS) / 1000;
                led.mid_brightness = MID_BRIGHTNESS;
                led.time_off = state->flashOffMS;
                break;
        default:
                return -EINVAL;
        }

        return write_leds(&led);
}

static int set_light_leds_notifications(struct light_device_t *dev,
                        struct light_state_t const *state)
{
        return set_light_leds(state, 0);
}

static int set_light_leds_attention(struct light_device_t *dev,
                        struct light_state_t const *state)
{
        return set_light_leds(state, 1);
}

我的第一个问题是:

set_light_leds_notifications()set_light_leds_attention() 在调用 set_light_leds() 函数时使用不同的第二个参数。

但是 set_light_leds() 函数在其定义中根本没有使用 int 类型。

然后,

  • 它们之间有什么区别?

  • 分别调用它们的目的是什么?

我的第二个问题是:

  • Notification 和 attention 之间的一般区别是什么 安卓应用程序?

我知道两者都是用来通知用户信息的。但我想了解有关这些差异的更多详细信息,特别是在哪种情况下注意比通知更重要。

最佳答案

在 Lights.h 中:

#define LIGHT_ID_BACKLIGHT          "backlight"
#define LIGHT_ID_KEYBOARD           "keyboard"
#define LIGHT_ID_BUTTONS            "buttons"
#define LIGHT_ID_BATTERY            "battery"
#define LIGHT_ID_NOTIFICATIONS      "notifications"
#define LIGHT_ID_ATTENTION          "attention"

评论说

These light IDs correspond to logical lights, not physical. So for example, if your INDICATOR light is in line with your BUTTONS, it might make sense to also light the INDICATOR light to a reasonable color when the BUTTONS are lit.

#define LIGHT_ID_BLUETOOTH          "bluetooth"
#define LIGHT_ID_WIFI               "wifi"

所以可能会有一些真正的灯,比如有些安卓平板有wifi灯,蓝牙灯。还有一些逻辑灯,Android设计者将这些逻辑灯设计成不同的事件会产生不同的灯光效果。

在您的代码中,set_light_leds_notificationsset_light_leds_attention 实际上是相同的,因为 set_light_leds 没有区分它们。它表示设备当前不想在通知和注意之间显示不同的灯光。但可能还有一些其他设备在乎。

Android 中的灯光服务将在不同的设备上得到不同的实现。

    devices->lights[LIGHT_INDEX_BACKLIGHT]
            = get_device(module, LIGHT_ID_BACKLIGHT);
    devices->lights[LIGHT_INDEX_KEYBOARD]
            = get_device(module, LIGHT_ID_KEYBOARD);
    devices->lights[LIGHT_INDEX_BUTTONS]
            = get_device(module, LIGHT_ID_BUTTONS);
    devices->lights[LIGHT_INDEX_BATTERY]
            = get_device(module, LIGHT_ID_BATTERY);
    devices->lights[LIGHT_INDEX_NOTIFICATIONS]
            = get_device(module, LIGHT_ID_NOTIFICATIONS);
    devices->lights[LIGHT_INDEX_ATTENTION]
            = get_device(module, LIGHT_ID_ATTENTION);
    devices->lights[LIGHT_INDEX_BLUETOOTH]
            = get_device(module, LIGHT_ID_BLUETOOTH);
    devices->lights[LIGHT_INDEX_WIFI]
            = get_device(module, LIGHT_ID_WIFI);

而且我认为我不需要进一步解释这一点,因为您“知道这些编码因设备而异。”

第二个问题:Android 应用程序中的 Notification 和 attention 之间的一般区别是什么?

没有太大区别。我不认为 N​​otificationManager 中有一个名为 attention 的实体。查看来源后,我发现当在通知中设置 FLAG_SHOW_LIGHTS 标志时,注意力灯将被启用。

if ((n.notification.flags & Notification.FLAG_SHOW_LIGHTS) != 0) {
    mAttentionLight.pulse();
}

所以我觉得可以在Notification中使用flags变量来区分attention和notification。在某些设备中,可能没有通知灯,因此当有非紧急通知时不会有任何灯闪烁。但是可能会有一个注意灯,所以如果你的应用程序有一个重要的通知要通知用户,请将 FLAG_SHOW_LIGHTS 设置为开,然后注意灯就会打开。

关于android - Android 中的 "Notification"和 "Attention"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636948/

相关文章:

java - 如何从 Android 上传文件到 Node.js 服务器

android - 显示多个通知

android - 使用alarmManager和service重复从服务器获取数据

android - Youtube API在视频上发表评论

java - 如何在父 fragment Activity 的 viewpager 中的两个列表 fragment 之间进行通信

android - Android Viewmodel 如何在内部工作, View 模型的内部工作

android - 从 git 树运行 android 源代码

android - 启动和停止服务的 PendingIntent

android-source - 如何将外部java库添加到自定义Android框架?

java - Android 源代码和 repo - 获取代码时到底发生了什么