#android
#Android
Вопрос:
Я пытаюсь включить светодиодное уведомление, например, зеленого цвета. Выключите экран и каждые 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();
}
}
В чем проблема? Светодиод не меняет свой цвет… Когда я выключаю экран, цвет остается зеленым, пока я не включу экран и не выключу его снова. Я хочу запустить эту службу один раз, выключить экран и увидеть, как светодиод меняет цвет :).
Кстати: я протестировал свой телефон, и он может отображать зеленые и красные индикаторы, так что это не проблема.
Заранее благодарю и прошу прощения за мой английский.
Я не могу ответить на свой собственный вопрос, поэтому добавлю это здесь:
Спасибо за ваши предложения Olsavage, я добавил ClearAll() в свой код, но эффект все тот же;/. Я также добавил ведение журнала в свое приложение (Log.i() ). Похоже, что система останавливает мою службу, когда я выключаю экран (почему??). Это что-то вроде:
Экран включен: таймер запущен, и уведомление развернуто (но я не вижу светодиода, потому что для его просмотра мне нужно выключить экран: P)
Нажмите на кнопку блокировки: таймер почти остановлен, поэтому светодиод иногда меняет цвет один раз.
Экран выключен: таймер не работает, метод TurnLedOn больше не выполняется. Светодиод не меняет цвета.
Теперь вопрос: почему моя служба останавливается после выключения экрана? Даже когда я выполняю в нем простую операцию (например, увеличиваю переменную). Может быть, мне нужно установить его приоритет или что-то в этом роде?
Я изменил интервал таймера на 100 мс и вижу, что код исправен. Светодиод менял цвета 5-15 раз, но затем немедленно останавливался. Я знаю, что это приложение совершенно бесполезно, но я просто хочу, чтобы оно работало :).
РЕДАКТИРОВАНИЕ 2: я думаю, мне придется использовать AlarmManager и PendingIntent для запуска моей службы… Завтра я попытаюсь это сделать.
Ответ №1:
Хорошо, я думаю, что я понял это. Вообще убрал таймер. Вместо этого я использую 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. Я думаю, что решил свою проблему.
Ответ №2:
Вам нужно использовать формат ARGB. Попробуйте установить 0xFFFF0000 — красный и 0xFF00FF00 — зеленый. Надеюсь, это поможет.
Хм, может быть, ваше старое уведомление не было очищено? Попробуйте использовать myNotificationManager.ClearAll(); Перед myNotificationManager.notify(0, уведомлять);
О, также попробуйте установить notify.ledOffMS = 5000;
Комментарии:
1. Он уже отображает правильный цвет 🙂 Проблема в том, что он не меняет цвет, когда экран выключен. Чтобы изменить цвет, я должен повернуть экран своего телефона и выключить его… Я хочу автоматически менять цвет.