2012-08-17 38 views
7

我想为用户提供选择灯光,声音或振动或这三个组合的选项Notification上的警报。设置振动,灯光或声音的组合在android

在android文档中,我看到有一个选项DEFAULT_ALL,所有三种警报方法都将被使用。

否则有一个选项可以选择其中的任何一个(DEFAULT_LIGHTSDEFAULT_VIBRATE,DEFAULT_SOUND)。

有什么方法可以通过哪种方式组合例如SOUNDVIBRATION但是没有LIGHTS和其他组合可以制作?


EDIT

Notification.Builder's(从prolink007的回答)方法setDefaults(int default)说:

值应该是以下字段与组合的一个或多个按位或: DEFAULT_SOUND,DEFAULT_VIBRATE,DEFAULT_LIGHTS。

这应该如何使用?

回答

20

Notification.Builder API 11NotificationCompat.Builder API 1提供了几种不同的方法来设置这些类型的警报。

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

的值应为一个或多个的以下字段与按位或:DEFAULT_SOUND,DEFAULT_VIBRATE,DEFAULT_LIGHTS组合。

没有测试,但我相信你会做这样的事情,如果你想SOUNDVIBRATIONLIGHTS

setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE | DEFAULT_LIGHTS); 
+0

请参阅编辑。 – Ashwin 2012-08-17 16:08:43

+0

@Ashwin我编辑了我的答案,提供了关于第二个问题的更多信息。 – prolink007 2012-08-17 16:27:09

+0

@Ashwin灯是否适合你,因为他们不在Samsung Galaxy Ace上工作? – 2012-09-07 17:51:03

1

在果冻豆器件,LED仅通知优先级设置为最大值或工作默认,请再次检查。下面的代码片段在jb设备上工作正常。

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

在这里,我显示蓝色led通知将保持在100毫秒和关闭3000毫秒,直到用户解锁他的设备。

,并检查是否使用的是NotificationCompat(兼容性)类不是忽略setDefaults方法和使用SetLight,SetSound,Setvibration等

+2

NotificationCompat.PRIORITY_DEFAULT适用于那些使用兼容性库的用户! – 2014-07-19 12:32:27

+0

我正在使用xperia z1s棒棒糖,led不通知 – blackHawk 2017-06-09 10:40:40

+0

这是什么值0xFF0000FF – blackHawk 2017-06-09 10:43:22

4

对于便携性,我更喜欢NotificationCompat
用户可能会偏好他/她的默认值。在NotificationCombat您可以设置振动,光,声,以用户的默认设置是这样的:

.setDefaults(-1) 

,其中“1”火柴DEFAULT_ALL:http://developer.android.com/reference/android/app/Notification.html#DEFAULT_ALL

这并不是说你必须请求VIBRATE许可,否则你会得到一个错误。添加到您的Android清单文件:

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

我知道这个答案已经在不久前回答,但我只是想提供我的绕了路,它的工作原理理想的灯光,振动的多重组合声音,在您为用户提供启用或禁用选项的情况下很有用。

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

我得到了同样的问题,但登陆这里后得到了一个更好的解决方案。 这里是一个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 
}