Android中的“通知”和“注意”有什么区别?

时间:2013-03-26 12:20:29

标签: 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类型。

然后,

  • 他们之间有什么区别?

  • 分别打电话给他们的目的是什么?

我的第二个问题是:

  • 通知和注意力之间的一般区别是什么? android应用程序?

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

1 个答案:

答案 0 :(得分:1)

在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"

评论说

  

这些灯光ID对应逻辑灯光,而非物理灯光。因此对于   例如,如果您的指示灯与您的按钮一致,则为   也可能有意义地将指示灯照亮到合理的位置   按钮点亮时的颜色。

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

所以可能会有一些真正的亮点,例如,一些Android平板电脑有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应用程序中的通知和注意力之间有什么不同?

没有太大的区别。我不认为在NotificationManager中有一个名为注意的实体。检查源后,我发现当通知中设置了FLAG_SHOW_LIGHTS标志时,将启用注意灯。

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

所以我认为你可以使用Notification中的flags变量来区分注意力和通知。在某些设备中,可能没有通知指示灯,因此当存在非紧急通知时,不会有任何指示灯闪烁。但是可能存在注意灯,因此如果您的应用程序有重要通知来通知用户,请设置FLAG_SHOW_LIGHTS,并且将关闭注意灯。