我正在尝试打开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来启动我的服务......明天我会尝试这样做。
答案 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;