每5秒更改一次LED通知的颜色

我正在尝试打开LED通知,例如绿色。 关闭屏幕,每隔5秒将该颜色更改为红色(绿色 – >红色,红色 – >绿色)。 我想我已经做了一切:在一项服务中我创建了一个执行显示通知方法的计时器。

public class LEDService extends Service { private boolean TimerStarted; private Timer timer; private NotificationManager myNotificationManager; private long LastColor; public TurnLedOn() { Notification notify = new Notification(); notify.flags |= Notification.FLAG_SHOW_LIGHTS; notify.LedOnMS = 500; notify.LedOffMS = 0; //I in other example I also used array of colors if (LastColor == 0x00FF00) notify.LedARGB = 0xFF0000; else notify.LedARGB = 0x00FF00; LastColor = notify.LedARGB; } private MyTimerTask extends TimerTask { @Override public void run() { TurnLedOn(); } } @Override public void OnCreate() { TimerStarted = false; myNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (TimerStarted == false) { timer = new Timer(); timer.schedule(new MyTimerTask(), 0, 5000); } return START_STICKY; } @Override public IBinder onBind() { return null; } @Override public void onDestroy() { timer.close(); } } 

问题是什么? LED不会改变颜色……当我关闭屏幕时,颜色为绿色,直到我打开屏幕并再次关闭它。 我想开始这项服务一次,关闭屏幕,看到LED灯变色:)。

顺便说一句:我测试了我的手机,它可以显示绿灯和红灯,所以这不是问题。

提前感谢,抱歉我的英语。

我无法回答我自己的问题所以我会在这里添加:

感谢您的建议Olsavage ,我在我的代码中添加了clearAll(),但效果仍然相同; /。 我还添加了日志记录到我的应用程序(Log.i())。 当我关闭屏幕时,看起来系统正在停止我的服务(为什么??) 。 这是这样的:

屏幕打开:计时器正在运行并且已经部署了通知(但我看不到它,因为看到它我必须关闭屏幕:P)

单击锁定按钮:计时器几乎停止,因此LED有时会改变颜色一次。

屏幕关闭:计时器不工作,TurnLedOn方法不再运行。 LED不会改变颜色。

现在的问题是: 为什么我的服务在关闭屏幕后停止了 ? 即使我在其中进行简单操作(例如递增variables)。 也许我必须设定优先权或其他什么?

我将定时器间隔更改为100毫秒,并看到代码是好的。 LED改变颜色5-15次,然后立即停止。 我知道这个应用程序完全没用,但我只是想让它工作:)。

EDIT2:我想我必须使用AlarmManager和PendingIntent来启动我的服务……明天我会尝试这样做。

好吧,我想我弄明白了。 完全删除了计时器。 相反,我使用AlarmManager :)。

我在onCreate中添加了以下代码:

 alarmmgr = (AlarmManager) getSystemService(ALARM_SERVICE); 

在onStartCommand中:

 public int onStartCommand(Intent intent, int flags, int startId) { TurnLedOn(); //Turn LED On myPendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); alarmmgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, myPendingIntent); //Setting alarm to be off after 5seconds. return Service.START_NOT_STICKY; } 

在onDestroy中:

 public void onDestroy() { notifymgr.cancel(LED_NOTIFICATION_ID); //Clearing notification alarmmgr.cancel(myPendingIntent); //Clear alarm } 

我认为代码还可以,但我是Android编程的初学者。 我想我解决了我的问题。

您需要使用ARGB格式。 尝试设置0xFFFF0000 – 红色和0xFF00FF00 – 绿色。 希望这可以帮助。

嗯,也许你的旧通知没有清除? 尝试使用myNotificationManager.clearAll(); 在myNotificationManager.notify之前(0,通知);

哦,还试着设置notify.ledOffMS = 5000;