
Хотя Android API не позволяет напрямую включать-выключать светодиодный индикатор или вспышку фотокамеры, на некоторых телефонах такая возможность имеется.
Как программно помигать разноцветными огоньками, как написать свой «Фонарик» или какими еще светодиодами устройства можно управлять — об этом Вы узнаете ниже.
Началось все с того, что я, исследуя файловую систему своего HTC Desire с помощью ES Проводника, случайно наткнулся на любопытные каталоги:
/sys/class/leds/blue
, /sys/class/leds/flashlight
и т.п.Какой еще blue?! Я видел только оранжевый и зеленый индикатор. Но самое интересное — внутри этих каталогов оказался файл
brightness
с правом на запись! Чем я сразу и воспользовался.На самом деле, это не простой файл, а интерфейс работы с драйвером светодиода. Так, записав в файл
/sys/class/leds/blue/brightness
положительное число, мы включим синий индикатор на корпусе телефона, записав 0 — выключим. Аналогично с индикаторами amber и green. Включив два светодиода вместе, получим новые цвета: Подкаталог в /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, но, вероятно, может работать и на других устройствах. Напишите мне, получится или не получится фокус на Вашем телефоне.