Как стать автором
Обновить

Программируем LED на телефоне

Время на прочтение2 мин
Количество просмотров105K

Хотя Android API не позволяет напрямую включать-выключать светодиодный индикатор или вспышку фотокамеры, на некоторых телефонах такая возможность имеется.

Как программно помигать разноцветными огоньками, как написать свой «Фонарик» или какими еще светодиодами устройства можно управлять — об этом Вы узнаете ниже.

Началось все с того, что я, исследуя файловую систему своего HTC Desire с помощью ES Проводника, случайно наткнулся на любопытные каталоги: /sys/class/leds/blue, /sys/class/leds/flashlight и т.п.
Какой еще blue?! Я видел только оранжевый и зеленый индикатор. Но самое интересное — внутри этих каталогов оказался файл brightness с правом на запись! Чем я сразу и воспользовался.

На самом деле, это не простой файл, а интерфейс работы с драйвером светодиода. Так, записав в файл /sys/class/leds/blue/brightness положительное число, мы включим синий индикатор на корпусе телефона, записав 0 — выключим. Аналогично с индикаторами amber и green. Включив два светодиода вместе, получим новые цвета: amber + blue = purple; green + blue = aqua.
Подкаталог в /sys/class/leds За что отвечает
lcd-backlight Яркость подсветки дисплея. В файл brightness записывается число от 0 до 255: больше — ярче.
flashlight Яркость светодиода-вспышки. Возможные значения: 0, 127, 128, 255.
button-backlight Подсветка кнопок (вкл/выкл).
amber
green
blue
Оранжевый, зеленый и синий индикаторы (вкл/выкл),
а также пурпурный (amber+blue) и голубой (green+blue) индикаторы.

А теперь, как это все программируется

public void ledControl(String name, int brightness) {<br>
    try {<br>
        FileWriter fw = new FileWriter("/sys/class/leds/" + name + "/brightness");<br>
        fw.write(Integer.toString(brightness));<br>
        fw.close();<br>
    } catch (Exception e) {<br>
        // Управление LED недоступно<br>
    }<br>
}<br>
<br>
// Включим пурпурный индикатор<br>
ledControl("amber", 255);<br>
ledControl("blue",  255);<br>
<br>
// Сделаем дисплей темнее<br>
ledControl("lcd-backlight", 30);<br>
<br>
// Выключим подсветку кнопок<br>
ledControl("button-backlight", 0);<br>
<br>
// Организуем фонарик средней яркости<br>
ledControl("flashlight", 128);<br>

Приложение-пример с исходными кодами можно скачать тут.


Заключение

Все! Теперь телефон светится, как новогодняя елка. Код проверялся только на HTC Desire под управлением Android 2.2, но, вероятно, может работать и на других устройствах. Напишите мне, получится или не получится фокус на Вашем телефоне.
Теги:
Хабы:
+53
Комментарии62

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн