2012-05-01 18 views
19

Actualización: estoy revisando la publicación original para compatibilidad antes de Android 3.0.¿Cómo recibir una notificación de luz LED?

Estoy tratando de crear una notificación simple y todo menos la luz funciona muy bien. Apago la pantalla cuando se activa la notificación. Usando este código obsoleto, el sonido y las vibraciones funcionan en Android 4.0 (Galaxy Nexus) y Android 2.3 (HTC EVO).

  • En el HTC EVO 2.3 las luces también funcionan.
  • En el Galaxy Nexus 4.0, las luces no funcionan.

    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; 
    

también he intentado API nuevas que no forman parte de la biblioteca de compatibilidad v4, por lo que sólo podría probar esto en el Galaxy Nexus. La vibración y el sonido funcionan nuevamente pero no las luces.

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

Ahora he probado esto en dos teléfonos Galaxy Nexus y la luz no funciona en ninguno de los dos. La pantalla está apagada cuando ejecuto las pruebas y todas las otras aplicaciones en los teléfonos activan las luces sin problema.

Respuesta

8

Si usa setDefaults (DEFAULT_LIGHTS) o setDefaults (DEFAULT_ALL), ignorará FLAG_SHOW_LIGHTS y cualquier llamada a setLights(). Descubrí que en mi teléfono, los valores predeterminados no encienden nada. Por lo tanto, no use DEFAULT_ALL o DEFAULT_LIGHTS, y juegue con el color RGB si es necesario ... aunque 0xff00ff00 debería funcionar en casi todos los casos.

+2

No hay luces: con este .setDefaults (Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE) \t .setLights (0xff00ff00, 300, 100) – pcm2a

+0

¿Qué tipo de teléfono? ¿Arraigado? ¿ROM personalizada? –

+0

acciones de Galaxy Nexus y también lo he intentado con un teléfono HTC Evo Android 2.3. He vuelto a trabajar la publicación para mostrar esta información eliminada. – pcm2a

7

El LED funciona cuando el dispositivo está apagado (no apagado: P). Para probar escribir una aplicación simple para crear una notificación con retraso y durante la demora, apague el teléfono y espere a que el LED parpadee.

6

encontramos con este today..if sus todavía útil ... Sólo algunas notificaciones con una prioridad - ALTA, MAX será capaz de hacer que el LED se ilumine, mientras que aquellos con menor prioridad BAJA, MIN no debería. La adición de este debe hacer el brillo del LED ...

builder.setPriority (Notification.PRIORITY_MAX)

+2

También la prioridad DEFAULT hace que el LED brille. – TechNyquist

1

también luchaban con esto para las edades! Leds funcionó muy bien en los dispositivos de Samsung, pero en otros no tuvo suerte. Finalmente encontré una solución; oyentes de configuración de la pantalla y fuera de eventos:

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

A continuación, agregue el conjunto y cancelación de la notificación en los oyentes:

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

Obras para mí ahora. Por alguna extraña razón, la notificación debe establecerse en este momento o el led no funciona. Todo lo demás en la notificación funciona cuando se establece en cualquier momento ...

Nota: el color y las horas de encendido/apagado realmente no funcionan al menos para los leds parpadeantes. Están definidos por HW y LPG (Led Pattern Generator) para que funcionen también en modo de suspensión profunda cuando la CPU está más o menos apagada, por lo que los patrones y colores admitidos dependen del HW que tenga. La mayoría de los sistemas tienen solo un patrón parpadeante y los colores pueden reducirse a lleno con R, G y B completos (y combinaciones). Para leds totalmente iluminados, todos los colores parecen estar disponibles.

1

Si desea encender la pantalla se enciende cuando se recibe una notificación, sugiero usar PowerManager y WakeLock. Lo que sigue es el código para activar la pantalla usando clases mencionadas:

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

NOTA: No se olvide de liberar el wakeLock usando wakeLock.release();, de lo contrario la pantalla permanecerá encendida.

P.S. El usuario también puede apagar la pantalla usando el botón de bloqueo. He hecho lo mismo en mi aplicación. No estoy usando wakeLock.release(); y dejo que el usuario apague la pantalla.

+0

Desde API 19, esto está en desuso – Aenadon

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

Agregue la notificación predeterminada. DEFAULT_LIGHTS.

Ejemplo:

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 la gente perezosa:

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

he tratado mi código de abajo, y funciona bien para mí. Mi móvil es 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); 

Simplemente elimine todos los ajustes 'DEFAULT_ALL'.

Cuestiones relacionadas