Как выполнить проверку данных, а затем установить определенные параметры телефона на основе результатов - PullRequest
0 голосов
/ 07 марта 2012

В настоящее время я работаю над приложением, которое требует изменения определенных настроек телефона, таких как громкость, когда срабатывает определенное событие, например, событие времени (между 9:00 и 17:00) или событие батареи (батарея ниже 30% ).

Первый способ, который я решил сделать, это настроить фоновую службу, которая проверяет системное время и уровень заряда батареи (например) каждые столько секунд или минут, а затем изменяет настройки телефона при достижении подходящего времени или уровня заряда батареи. , Я не совсем уверен, как это сделать, и я видел некоторые другие методы, которые кажутся возможными.

Какой метод лучше всего использовать для проверки данных и изменения настроек на основе результатов, не требуя взаимодействия с пользователем?

Заранее спасибо.

[РЕДАКТИРОВАТЬ]

После того, как Джакар и Гобернадор сказали использовать AlarmManager, BroadcastReceiver и IntentService, я наткнулся на этот ответ:

android: запуск фоновой задачи с помощью AlarmManager

Что объясняется на примерах, как этого добиться, спасибо за помощь, ребята!

[РЕДАКТИРОВАТЬ]

Мне удалось настроить его и заставить службу работать, она еще ничего не делает, но все остальное должно быть легко. Я сделал это со следующими компонентами:

  • Boot BroadcastReceiver, который устанавливает повторяющийся сигнал для запуска моего сигнала BroadcastReceiver. Это запустит службу после перезагрузки телефона.
  • Аналогичный код в моей основной деятельности приложения, который отменяет любые другие ожидающие намерения запустить службу. Служба запускается при запуске приложения, хорошо для запуска после установки.
  • Alarm BroadcastReceiver класс с кодом startService().
  • Наконец, мой класс IntentService, в котором есть то, что я хочу сделать в методе onHandleIntent(). (Я также хочу добавить, что у меня была проблема с этим классом, потому что конструктору не было разрешено никаких параметров).

Еще раз спасибо.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Вы можете проверить уровень заряда батареи в сервисе.Думаю, я бы порекомендовал включить все (кроме батареи), а затем посмотреть, сколько времени потребуется, чтобы проверить / установить все, что предполагается для вашего приложения.Если оно меньше 50 мс, используйте BroadcastReceiver в любом случае, когда уровень заряда батареи не имеет значения (например, время срабатывания).

Тогда, если пользователь разрешает проверку уровня заряда батареи, всегда используйте услугу.

Если выполнение всех настроек системы проверки / настройки занимает более 50 мс, всегда используйте Service.

Я бы порекомендовал зарегистрировать BroadcastReceiver с действием BOOT_COMPLETED, чтобы ваше приложение могло запускаться после перезагрузки.Кроме того, я не рекомендую запускать сервис постоянно.Я бы порекомендовал использовать AlarmManager для запуска службы каждые 10 минут или около того.Причина в том, что если вашему сервису требуется 15 секунд, чтобы сделать то, что ему нужно, он будет тратить батарею, чтобы продолжать работать все время.

Кроме того, если вы собираетесь использовать сочетание Service / BroadcastReceiver,Я бы порекомендовал создать класс (назовите его M для методов).Тогда в M у вас будет метод (скажем, doSomething()), чтобы делать все, что вам нужно.Затем в Службе или Получателе вам просто нужно позвонить по номеру M.doSomething(), чтобы вам не приходилось менять код дважды при каждом его изменении.

Дайте мне знать, если я был неясен / сбит с толкуили мне нужно что-то добавить, и я сделаю все возможное, чтобы уточнить.

РЕДАКТИРОВАТЬ :
Вам нужно будет использовать AlarmManager для установки сигналов, Calendarчтобы получить и установить конкретные времена / даты.https://stackoverflow.com/a/7342724/802469 поможет вам в этом процессе.Чтобы процессор ЦП устройства не работал и не мешал работе службы, вам нужно будет использовать PowerManager.Что касается других вещей, которые вы не указали, вы сможете найти с помощью Google или просмотрев документы.WifiManager для изменения настроек Wi-Fi.

1 голос
/ 07 марта 2012

Было бы трудно сделать это с Service. То, что вы хотите, это BroadcastReciever. Android OS работает так, когда происходят определенные события (например, ACTION_BOOT_COMPLETED ИЛИ ACTION_POWER_CONNECTED, см. Раздел «Стандартные действия по трансляции» в документации Intent ), Android транслирует Intent сообщая всем приложениям, что это событие произошло. Что вам нужно сделать, это настроить BroadcastReciever для перехвата нужных вам передач.

public class MyReciever extends BroadcastReciever {
    @Overwrite
    public void onRecieve(Context context, Intent intent) {
        //parse intent
        //carry out actions
    }
}

Обратите внимание, что единственный метод, который вам нужно перезаписать - это onRecieve(). Кроме того, кажется, что вы будете искать несколько разных трансляций. В этом случае вы можете создать несколько расширений BroadcastReciever: например, BatteryLowReciever, AtWorkTimeReciever и т. Д. Вы также можете выбрать один и проанализировать несколько намерений ...

private final String[] broadcasts = {android.intent.action.BATTERY_LOW, ...};
int i = 0;
for(i ; i < broadcasts.length, i++) {
    if (intent.getAction().equals(broadcasts[i]))
        break;
}
switch (i) {
    case 1:
        //perform battery low actions
        break;
    case 2:
        //different actions

    //More cases and actions
}

РЕДАКТИРОВАТЬ: Основываясь на том, что вы сказали мне, вот список вещей, чтобы посмотреть:

  • Activity для создания пользовательского интерфейса для редактирования профилей
  • AlarmManager для временной активации
  • BroadcastReciever для батарей и других активаций
  • IntentService для реализации профилей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...