2012-08-17 12 views
7

Quiero proporcionar al usuario la opción de elegir Luces, Sonidos o Vibración o una combinación de estos tres para alertas en Notification.Establezca una combinación de Vibración, Luces o Sonido para una notificación en android

En los documentos de Android vi que hay una opción de DEFAULT_ALL donde se usarán los tres métodos de alertas.

De lo contrario, hay una opción para elegir cualquiera de ellos (DEFAULT_LIGHTS, DEFAULT_VIBRATE, DEFAULT_SOUND).

¿Hay alguna manera de que se pueda hacer una combinación de, por ejemplo, SOUND y VIBRATION pero no LIGHTS y otras combinaciones?


EDITAR

Notification.Builder's método (de la respuesta de prolink007) setDefaults(int default) dice que:

el valor debe ser uno o más de los siguientes campos combinados con bit a bit-o: DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS.

¿Cómo se debe usar esto?

Respuesta

20

El Notification.Builder API 11 o NotificationCompat.Builder API 1 ofrece algunos métodos diferentes para establecer este tipo de alertas.

  • setLights (...)
  • setSound (...)
  • setVibrate (...)

El valor debe ser uno o más de los los siguientes campos combinados con bitwise-o: DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS.

No se ha probado, pero creo que haría algo como esto si quería SOUND, VIBRATION y LIGHTS:

setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE | DEFAULT_LIGHTS); 
+0

por favor vea la edición. – Ashwin

+0

@Ashwin Edité mi respuesta con más información sobre su segunda pregunta. – prolink007

+0

@Ashwin ¿Las luces están funcionando para usted, porque no funcionan en Samsung Galaxy Ace? –

1

En los dispositivos de la haba de jalea, LED sólo funciona si la prioridad de notificación se encuentra al máximo o predeterminado, verifique de nuevo. El siguiente fragmento de código funciona bien para mí en los dispositivos jb.

notification.setLights(0xFF0000FF,100,3000); 
notification.setPriority(Notification.PRIORITY_DEFAULT); 

Aquí estoy mostrando el color azul llevó para la notificación de que se mantendrá durante 100 ms y apagado durante 3000 ms hasta el usuario desbloquea el dispositivo.

Y comprobar si está utilizando la clase NotificationCompat (compatibilidad) que ignorar método setDefaults y utilizar SetLight, SetSound, Setvibration, etc

+2

NotificationCompat.PRIORITY_DEFAULT para aquellos que usan la biblioteca de compatibilidad. –

+0

Estoy usando xperia z1s lollipop, led no funciona para la notificación – blackHawk

+0

¿cuál es este valor 0xFF0000FF – blackHawk

4

Para un transporte prefiero NotificationCompat.
El usuario posiblemente prefiera sus valores predeterminados.En NotificationCombat puede establecer vibración, luz y sonido a la configuración predeterminada del usuario así:

.setDefaults(-1) 

donde partidos "-1" para DEFAULT_ALL: http://developer.android.com/reference/android/app/Notification.html#DEFAULT_ALL

No es que usted debe solicitar el permiso de vibración, de lo contrario se obtener un error Agregue esto a su archivo de manifiesto de Android:

<uses-permission android:name="android.permission.VIBRATE" /> 
5

Sé que esta respuesta ha sido contestada hace un tiempo, pero sólo quería ofrecer mi manera de hacer las cosas, que funciona idealmente para una combinación múltiple de luces, vibraciones y sonido, útil en caso de que esté ofreciendo opciones al usuario para habilitarlas o deshabilitarlas.

int defaults = 0; 
if (lights) { 
    defaults = defaults | Notification.DEFAULT_LIGHTS; 
}    
if (sound) { 
    defaults = defaults | Notification.DEFAULT_SOUND; 
} 
if (vibrate) { 
    defaults = defaults | Notification.DEFAULT_VIBRATE; 
} 
builder.setDefaults(defaults); 
0

Tengo el mismo problema, pero después de aterrizar aquí obtuve una mejor solución. Aquí está un kotlin:

fun getDefaults(val isSoundOn: Boolean, val isVibrate: Boolean, val isLightOn: Boolean): Int { 
    var defaults = 0 
    if (isLightOn && isSoundOn && isVibrate) 
     return Notification.DEFAULT_ALL 
    if (isLightOn) { 
     defaults = defaults or Notification.DEFAULT_LIGHTS 
    } 
    if (isSoundOn) { 
     defaults = defaults or Notification.DEFAULT_SOUND 
    } 
    if (isVibrate) { 
     defaults = defaults or Notification.DEFAULT_VIBRATE 
    } 
    return defaults 
} 
Cuestiones relacionadas