Менеджер Bluetooth
Как известно, постоянно включенный Bluetooth изрядно уменьшает время жизни телефона. В стандартной поставке Windows Mobile отсутствует удобный способ включать и выключать bluetooth, а по дороге на работу так хочется легко и просто включить его, чтобы получить возможность разговаривать через гарнитуру! Важная особенность — для этого переключения очень не хочется, чтобы было необходимо смотреть на экран.
Я решил разработать удобное приложение, которое при старте переключает состояние bluetooth, после чего ждет одну минуту и автоматически выгружается из памяти. Таким образом, достаточно назначить вызов приложения на одну из аппаратных кнопок и получить желаемый результат.
Всегда любил, чтобы мои приложения хотя бы немного радовали глаз. Именно поэтому в верхней части приложения можно наблюдать логотип bluetooth. Он цветной, когда bluetooth активен, и серый, когда bluetooth выключен.
Я добавил текстовое поле с отображением нескольких строк для журнализации. Также помимо основной задачи переключать состояние bluetooth при старте приложения, я добавил две кнопки для явного переключения состояния уже после старта.
Для работы с Bluetooth воспользуемся P/Invoke для работы с Bluetooth:
[DllImport("BthUtil.dll")]
private static extern int BthGetMode(out RadioMode dwMode);
[DllImport("BthUtil.dll")]
private static extern int BthSetMode(RadioMode dwMode);
* This source code was highlighted with Source Code Highlighter.
Кроме этого, я также воспользовался брокером состояний и уведомлений (SNAPI). Суть в том, что если состояние bluetooth будет изменяться за пределами нашего приложения, без SNAPI мы об этом не узнаем. Можно подписаться практически на любые уведомления. Мы же подпишемся только на bluetooth:
SystemState bluetoothStatePowerOn = new SystemState(SystemProperty.BluetoothStatePowerOn);
bluetoothStatePowerOn.Changed += new ChangeEventHandler(bluetoothStatePowerOn_Changed);
void bluetoothStatePowerOn_Changed(object sender, ChangeEventArgs args)
{
UpdateScreen();
}
* This source code was highlighted with Source Code Highlighter.
Напоследок нам необходимо разобраться с автоматическим завершением приложения. Всё очень просто — есть таймер, который ждёт минуту, после чего выполняется цикл, на каждой итерации которого вызывается Thread.Sleep(1000). Это создает отличный эффект, когда идет завершение программы "Auto shutdown in <кол-во> seconds" и позволяет пользователю понять, что приложение не закрылось аварийно.
Исходный код на С#: BluetoothManager.zip
Перевод: Андрей Коновалов