2

我正在學習android源代碼並已研究過LightsService框架。Android中的「通知」和「注意」有什麼區別?

我知道那些編碼根據設備而不同。但是我看到以下代碼時感到困惑。

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

在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對應於邏輯燈,而不是物理。因此,對於 示例,如果您的INDICATOR指示燈與您的按鈕一致,則當按鈕點亮時, 也可能會使INDICATOR指示燈點亮爲合理的 顏色。

而且

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

所以可能有一些真正的光,例如,部分Android墊有wifi燈,藍牙燈。還有一些邏輯燈,Android設計師設計這些邏輯燈,以便不同的事件可以產生不同的照明效果。

在您的代碼中,set_light_leds_notificationsset_light_leds_attention實際上是相同的,因爲set_light_leds不區分它們。它表明該設備目前不想在通知和注意之間顯示不同的燈光。但可能有一些其他設備關心。

Android中的lights服務將在不同的設備中獲得不同的實現。

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

所以我認爲你可以在通知中使用flags變量來區分注意力和通知。在某些設備中,可能沒有通知指示燈,因此在發生非緊急通知時不會有任何指示燈閃爍。但是可能會有警示燈,所以如果您的應用程序有重要通知來通知用戶,請將FLAG_SHOW_LIGHTS設置爲打開,並且警示燈將亮起。

相關問題