7

我想为用户提供选择灯光、声音或振动或这三者的组合的选项,用于警报Notification

在 android 文档中,我看到有一个选项可以选择DEFAULT_ALL在所有三种警报方法中的使用位置。

否则,可以选择其中任何一个(DEFAULT_LIGHTS, DEFAULT_VIBRATE, DEFAULT_SOUND)。

有什么方法可以组合例如SOUNDand VIBRATIONbut noLIGHTS和其他组合?


编辑

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

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

这个应该怎么用?

4

5 回答 5

20

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

  • 设置灯(...)
  • 设置声音(...)
  • 设置振动(...)

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

未经测试,但我相信如果你愿意,你会做这样的事情SOUNDVIBRATION并且LIGHTS

setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE | DEFAULT_LIGHTS);
于 2012-08-17T13:31:27.660 回答
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);
于 2014-04-16T19:35:13.930 回答
5

为了便携性,我更喜欢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" />
于 2013-11-09T23:24:04.510 回答
1

在果冻豆设备上,仅当通知优先级设置为最大或默认时,led 才有效,请再次检查。以下代码片段在 jb 设备上对我来说工作正常。

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

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

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

于 2012-12-25T07:15:37.063 回答
0

我遇到了同样的问题,但在登陆这里后得到了更好的解决方案。这是一个科特林:

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
}
于 2018-03-01T06:36:24.250 回答