настройка широковещательного ресивера для включения bluetooth

Я новичок в Java и Android, и я пытаюсь понять, как выполнить следующее действие. Кстати, я считаю, что официальная документация Google Android НЕ предназначена для новичков, и мне хотелось бы, чтобы какая-либо ссылка была на что-то более... недружелюбное к программистам.

Хорошо, вот:

Я хотел бы автоматически включать/выключать Bluetooth при подключении/отключении телефона - ПК или переменного тока.

Итак, я нашел следующие компоненты:

BatteryManager: кажется, что лучше всего использовать намерение ACTION_BATTERY_CHANGED и настроить широковещательный приемник, когда это изменится. Это правильно?

Я также нашел BluetoothAdapter, и в нем есть метод enable(). В котором написано: "не использовать без явных действий пользователя для включения Bluetooth". - является ли подключение телефона явным действием пользователя? Это то, что мне нужно использовать? То же самое относится и к отключению (), конечно.

Кроме того, BroadcastReceiver, примеры которых я видел в Интернете (ах), только показывают мне, как запустить намерение - обычно для открытия новой активности. Я предполагаю, что у меня может быть широковещательный приемник, запускающий метод, в котором я буду включать и выключать Bluetooth? Может ли намерение быть методом, а не только действием?

Любая помощь будет оценена по достоинству!


person raingod    schedule 23.02.2012    source источник


Ответы (1)


BatteryManager: похоже, что лучше всего использовать намерение ACTION_BATTERY_CHANGED и настроить широковещательный приемник, когда это изменится. Это правильно?

Да, это один из способов отслеживать такие вещи, как подключение зарядного устройства (включая подключение к USB-порту с возможностью зарядки). Вы также можете использовать ACTION_POWER_CONNECTED.

подключение телефона является явным действием пользователя?

НЕТ - определенно нет, если вы не создадите всплывающее окно с запросом согласия пользователя. Чтобы процитировать документы для метода enable()...

Bluetooth никогда не следует включать без прямого согласия пользователя. Если вы хотите включить Bluetooth для создания беспроводного соединения, вы должны использовать намерение ACTION_REQUEST_ENABLE, которое вызовет диалоговое окно с запросом пользователя разрешение на включение Bluetooth. Метод enable() предоставляется только для приложений, которые включают пользовательский интерфейс для изменения системных настроек, таких как приложение «менеджер питания».

Когда я подключаю свое устройство для зарядки, в 9 случаях из 10 я не хочу, чтобы оно делало что-либо, кроме зарядки. Если бы я установил ваше приложение на свой телефон и обнаружил, что оно включает Bluetooth без моего ведома, ваше приложение было бы немедленно удалено.

Существуют известные проблемы с безопасностью Bluetooth, и, в зависимости от пользовательских настроек, вы можете подвергнуть риску чье-то устройство, если оно будет включено без их ведома.

Может ли намерение быть методом, а не только действием?

Нет, Intent является частью системы обмена сообщениями. См. раздел Намерения и фильтры намерений. Да, я знаю, что это не очень удобно для новичков, но Android — сложный зверь, и если вы действительно хотите успешно программировать для него, вам нужно прочитать подобные материалы.

person Squonk    schedule 23.02.2012
comment
Привет, MisterSquonk, спасибо за ответ :) Я понимаю вашу точку зрения о том, что вы не хотите делать это молча, но это не относится к моему приложению - это будет чрезвычайно простое приложение - все, что оно будет делать, это включать и выключать Bluetooth . так что, если вы скачаете и установите его, вы знаете, что получаете. Значит, не похоже, что есть способ включать/выключать в фоновом режиме без диалога, а? У Juice Defender есть такая опция, но она не ОЧЕНЬ хорошо работает. Кроме того, чтобы было ясно, я не боюсь много читать, просто в 4 из 5 раз я не понимаю их объяснения ;) - person raingod; 25.02.2012
comment
Я никогда не нахожу очень сильного слова :) Мы включаем Bluetooth без прямого согласия пользователя, потому что у нас есть профессиональное приложение для водителей, и оно должно оставаться включенным все время, независимо от того, что делает пользователь. Я рад, что разработчики Android позволили нам программно принудительно включить Bluetooth, иначе наше приложение потерпело бы неудачу в реальном мире :) - person Henrique de Sousa; 20.02.2014