更新:我正在重新编写原始帖子,以便在Android 3.0之前兼容。
我正在尝试创建一个简单的通知,除了灯光之外的所有功能都很棒。当通知触发时,我确实关闭了屏幕。使用此弃用的代码声音和振动适用于Android 4.0(Galaxy Nexus)和Android 2.3(HTC 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手机上进行了测试,而且这两款手机都没有。当我运行测试时屏幕关闭,手机上的所有其他应用程序触发灯光时没有问题。
答案 0 :(得分:9)
如果使用setDefaults(DEFAULT_LIGHTS)或setDefaults(DEFAULT_ALL),它将忽略FLAG_SHOW_LIGHTS以及对setLights()的任何调用。我发现在我的手机上,默认设置不会点亮任何东西。所以不要使用DEFAULT_ALL或DEFAULT_LIGHTS,并在必要时使用RGB颜色......尽管0xff00ff00应该可以在所有情况下使用。
答案 1 :(得分:7)
当设备关闭时(不关闭电源:P),LED工作。要测试编写一个简单的应用程序来创建延迟通知,并在延迟期间关闭手机并等待LED闪烁。
答案 2 :(得分:6)
今天碰到了这个......如果它仍然有用...... 只有某些具有优先级的通知 - HIGH,MAX才能使LED发光, 而优先级较低的那些LOW,MIN则不应该。 添加它应该使LED发光...
builder.setPriority(Notification.PRIORITY_MAX)
答案 3 :(得分:6)
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());
}
答案 4 :(得分:2)
如果您想在收到通知时打开屏幕指示灯,我建议您使用PowerManager
和WakeLock
。以下是使用上述类打开屏幕的代码:
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();
释放wakeLock,否则屏幕将保持打开状态。
P.S。用户也可以使用锁定按钮关闭屏幕。我在我的应用中做了同样的事情。我没有使用wakeLock.release();
并将其留给用户关闭屏幕。
答案 5 :(得分:2)
我在下面尝试了我的代码,它对我来说很好。我的手机是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'设置。
答案 6 :(得分:1)
我也和它斗争多年了! Leds在三星设备上工作得很好,但在其他设备上,没有运气。我终于找到了一个解决方案;设置监听器以屏幕开启和关闭事件:
registerReceiver(this.screenOnListener, new IntentFilter("android.intent.action.SCREEN_ON"));
registerReceiver(this.screenOffListener, new IntentFilter("android.intent.action.SCREEN_OFF"));
然后在这些侦听器上添加设置和取消通知:
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);
}
}
现在为我工作。由于某些奇怪的原因,此时需要设置通知,或者led无法正常工作。通知中的其他所有内容都可以随时设置...
注意:颜色和开/关时间至少对闪烁的LED无效。它们由HW和LPG(Led Pattern Generator)定义,因此当CPU或多或少关闭时它们也可以在深度睡眠中工作,因此支持的模式和颜色取决于您拥有的HW。大多数系统只有一个闪烁模式,并且在完全关闭R,G和B(以及组合)时颜色可能会减少到完全。对于完全点亮的LED,似乎可以使用所有颜色。
答案 7 :(得分:1)
添加默认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();
答案 8 :(得分:0)
.SetLights (Color.Red.ToAndroid (), 300, 300)