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

时间:2011-11-07 18:15:08

标签: android

我正在尝试打开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不会改变颜色。

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

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

EDIT2: 我想我将不得不使用AlarmManager和PendingIntent来启动我的服务......明天我会尝试这样做。

2 个答案:

答案 0 :(得分:2)

好的,我想我明白了。完全删除了计时器。相反,我使用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编程的初学者。我想我解决了我的问题。

答案 1 :(得分:1)

您需要使用ARGB格式。尝试设置0xFFFF0000 - 红色和0xFF00FF00 - 绿色。希望这会有所帮助。

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

哦,也可以尝试设置notify.ledOffMS = 5000;