2012-05-01 80 views
19

更新:我正在重新編寫Android 3.0之前的兼容性原始文章。如何獲得LED燈通知?

我想創建一個簡單的通知和一切,但燈光效果很好。通知觸發時,我確實已關閉屏幕。在Android 4.0(Galaxy Nexus)和Android 2.3(HTC EVO)上使用此棄用的代碼聲音和振動。

  • 在2.3宏達EVO的燈也工作。
  • 在4.0 Galaxy Nexus上,指示燈不起作用。

    Notification notification = 
         new Notification(R.drawable.ic_launcher, "My Ticker!",System.currentTimeMillis()); 
    notification.setLatestEventInfo(context, "My Title", "My Message", pendingIntent); 
    notification.defaults |= Notification.DEFAULT_SOUND; 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    
    //notification.defaults |= Notification.DEFAULT_LIGHTS; 
    
    notification.ledARGB = 0xff00ff00; 
    notification.ledOnMS = 300; 
    notification.ledOffMS = 1000; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
    
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    

我也曾嘗試不屬於V4兼容性庫的一部分更新的API,所以我只能測試這對Galaxy Nexus的。振動和聲音再次運行但不亮。

Notification.Builder builder = new Notification.Builder(context); 
     builder.setContentIntent(pendingIntent) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setTicker("My Ticker") 
      .setWhen(System.currentTimeMillis()) 
      .setAutoCancel(true) 
      .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.FLAG_SHOW_LIGHTS) 
      .setLights(0xff00ff00, 300, 100) 
      .setContentTitle("My Title 1") 
      .setContentText("My Text 1"); 
     Notification notification = builder.getNotification(); 

我現在已經在兩個股票的Galaxy Nexus手機和上既沒有光亮工程測試這一點。當我運行測試時,屏幕關閉,手機上的所有其他應用程序都可以毫無問題地觸發燈光。

回答

8

如果使用setDefaults(DEFAULT_LIGHTS)或setDefaults(DEFAULT_ALL),它將忽略FLAG_SHOW_LIGHTS和任何對setLights()的調用。我發現在我的手機上,默認設置不會點亮任何東西。因此,不要使用DEFAULT_ALL或DEFAULT_LIGHTS,並根據需要使用RGB顏色進行播放......儘管0xff00ff00在幾乎所有情況下都能正常工作。

+2

沒有燈亮:.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE) \t .setLights(0xff00ff00,300,100) – pcm2a

+0

什麼樣的手機?根?自定義ROM? –

+0

Galaxy Nexus的股票,我也嘗試過使用HTC Evo Android 2.3手機。我修改了帖子以顯示這些修改後的信息。 – pcm2a

7

當設備關閉(未關閉電源:P)時,LED工作。要測試寫一個簡單的應用程序來創建延遲通知,並在延遲期間關閉手機,並等待看到LED閃爍。

6

今天遇到這個..如果它仍然有用... 只有某些具有優先級 - HIGH,MAX的通知才能使LED發光,而較低優先級LOW,MIN則不應該。 添加這應該使LED發光...

builder.setPriority(Notification.PRIORITY_MAX)

+2

默認優先級會導致LED發光。 – TechNyquist

1

我也有這個戰鬥的年齡! Leds在三星設備上運行得很好,但在其他設備上運行得不錯。儘管我終於找到了解決辦法;設置聽衆屏幕上和關閉事件:現在我

public class ScreenOffListener extends BroadcastReceiver 
{ 
    public ScreenOffListener() {} 

    public void onReceive(Context paramContext, Intent paramIntent) 
    { 
     Notification notif = new Notification(); 
     notif.ledARGB = "0xFFFF0000"; // Red 
     notif.flags = Notification.FLAG_SHOW_LIGHTS; 
     notif.ledOnMS = 200; 
     notif.ledOffMS = 200; 
     nm.notify(NOTIFICATION_ID, notif); 
    } 
} 

public class ScreenOnListener extends BroadcastReceiver 
{ 
    public ScreenOnListener() {} 

    public void onReceive(Context paramContext, Intent paramIntent) 
    { 
     NotificationTest.nm.cancel(NOTIFICATION_ID); 
    } 
} 

作品:

registerReceiver(this.screenOnListener, new IntentFilter("android.intent.action.SCREEN_ON")); 
registerReceiver(this.screenOffListener, new IntentFilter("android.intent.action.SCREEN_OFF")); 

然後添加集和通知的取消對那些聽衆。出於某種奇怪的原因,此時需要設置通知或者LED不工作。通知中的其他內容隨時可以設置...

注意:顏色和開/關時間至少對閃爍的LED不起作用。它們由硬件和液晶顯示器(LED圖形發生器)定義,以便在CPU處於或多或少關閉狀態時它們也能在深度睡眠中工作,因此支持的圖案和顏色取決於您擁有的硬件。大多數系統只有一種閃爍模式,並且在完全關閉R,G和B(以及組合)時,顏色可能會減少到完全。對於完全點亮的LED,所有顏色似乎都可用。

1

如果你想在收到通知時打開屏幕燈,我建議使用PowerManagerWakeLock。以下是將使用提到的類在屏幕上的代碼:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
           | PowerManager.ACQUIRE_CAUSES_WAKEUP 
           | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
wakeLock.acquire(); 

注意:不要忘記使用wakeLock.release();釋放激活鎖定,否則屏幕會保持接通。

P.S.用戶也可以使用鎖定按鈕關閉屏幕。我在我的應用程序中做了同樣的事。我沒有使用wakeLock.release();並將其留給用戶關閉屏幕。

+0

自API 19以來,這已被棄用 – Aenadon

0
.SetLights (Color.Red.ToAndroid(), 300, 300) 
0

添加默認Notification.DEFAULT_LIGHTS。

例子:

Notification notification = new NotificationCompat.Builder(baseCtx) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(title) 
      .setContentText(body) 
      .setDefaults(
         Notification.DEFAULT_SOUND 
        | Notification.DEFAULT_VIBRATE 
        | Notification.DEFAULT_LIGHTS 
      ) 
      .build(); 
3

4懶惰的人:

private void testNotification() { 
    Notification.Builder builder = new Notification.Builder(this); 
    builder.setSmallIcon(R.drawable.ic_launcher) 
     .setPriority(Notification.PRIORITY_HIGH) 
     .setOngoing(true); 
    builder.setLights(0xff00ff00, 300, 100); 
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(1, builder.build()); 
} 
1

我已經試過我的代碼的下方,它爲我工作得很好。我的手機是Nexus 6P:

mBuilder.setContentTitle("APP_NAME") 
       .setContentText(msg) 
       .setContentIntent(PendingIntent.getActivity(mCtxt, UUID.randomUUID().hashCode(), new Intent(mCtxt, ReceivePushActivity.class), Notification.FLAG_AUTO_CANCEL)) 
       .setWhen(System.currentTimeMillis()) 
       .setPriority(Notification.PRIORITY_DEFAULT) 
       .setAutoCancel(true) 
       //.setDefaults(Notification.DEFAULT_ALL) 
       .setVibrate(new long[] {0, 1000, 200,1000 }) 
       .setLights(Color.MAGENTA, 500, 500) 
       .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
       .setSmallIcon(R.mipmap.notify_logo); 

     Notification ntf = mBuilder.build(); 
//  ntf.flags = Notification.DEFAULT_ALL; 
//  ntf.flags |= Notification.FLAG_ONLY_ALERT_ONCE; 
//  ntf.flags |= Notification.FLAG_AUTO_CANCEL; 

     mNotificationManager.notify(notifyId, ntf); 

只需刪除所有'DEFAULT_ALL'設置。