Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВКР-Пример.doc
Скачиваний:
148
Добавлен:
10.05.2015
Размер:
528.38 Кб
Скачать

4.4 Разработка модуля оптимизации

Работа приложения разработанного в рамах выпускной квалификационной работы начинается с главного окна, в котором пользователь может выбрать один из трех режимов работы. Скриншот меню представлен на рисунке 4.3.

Рисунок 4.3 – Меню приложения

Далее подробное описание каждого из трех режимов работы приложения.

Стандартный режим

Данный режим состоит из двух окон. В первом окне пользователь может увидеть запущенные на данный момент приложения и остановить их нажатием на одну кнопку, либо выбрать те, которые будут завершены. Так же существует возможность создания пользовательского списка приложений, которые будут добавлены в список исключений, и программой завершаться не будут. Скриншот диспетчера приложений представлен на рисунке 4.4.

Рисунок 4.4 – Диспетчер приложений

С помощью класса RunningAppProcessInfo можно получить информацию о работающем в системе процессе. Это могут быть не только видимые или активные процессы. Пользователь во время работы на мобильном устройстве создает множество процессов, которые потом не использует, забывая их закрыть. Эти процессы продолжают выполняться фоновом режиме.

Для получения информации о процессах, выполняющихся в системе, в классе ActivityManagerиспользуется метод getRunningAppProcesses(), который возвращает список процессов, выполняющихся в данный момент на устройстве в виде списка объектов RunningAppProcessInfo.

В классе RunningAppProcessInfo определено множество полей и констант, характеризующих выполняющийся процесс: processName — имя процесса, pid — идентификатор процесса PID (Process ID), pkgList — список пакетов и другая нужная информация.

Второе окно выводит на экран текущее состояние модулей (3G,Wi-Fi,Bluetooth,GPS) и настроек (синхронизация, автоповорот, яркость экрана), и позволяет выключить не нужные, либо уменьшить в случае с яркостью экрана. Так же предусмотрено отключение всех одной кнопкой. Скриншот системы управления модулями представлен на рисунке 4.5.

Рисунок 4.5 – Система управления модулями

Управление соединениями 3G,Wi-Fi,GPS,Bluetooth, Синхронизация и автоповорот обрабатываются аналогичным образом. Для наглядности ниже приведен пример управления соединениемWi-Fi.

Класс WifiManager предоставляет базовую функциональность для управления Wi-Fi-соединениями непосредственно из кода приложения. Объект WifiManager, так же как и остальные системные менеджеры, создается путем вызова метода getSystemService():

WifiManager manager = getSystemService(Context.WIFI_SERVICE);

Созданный объект WifiManager можно использовать для подключения и конфигурации Wi-Fi-сети, сканирования точек доступа и других операций по управлению сетевыми соединениями, специфичными для сети Wi-Fi.

В классе WifiManager также определен большой набор методов для управления соединением и получения базовых данных о Wi-Fi-соединении.

Для управления соединением в классе WifiManager определен метод setWifiEnabled(). Используя его, можно включать или выключать соединение, передавая в этот метод в качестве параметра булевое значение — true для включения соединения manager.setWifiEnabled(true) илиfalse— для выключения соединенияmanager.setWifiEnabled(false).

Для определения состояния соединения в классе WifiManagerсуществует несколько констант. СостояниеWi-Fiсоединения определяется следующими значениями:

  • WIFI_STATE_ENABLING;

  • WIFI_STATE_ENABLED;

  • WIFI_STATE_DISABLING;

  • WIFI_STATE_DISABLED;

  • WIFI_STATE_UNKNOWN.

Как видно из названий этих констант, существуют константы WIFI_STATE_ENABLINGиWIFI_STATE_DISABLINGдля отображения промежуточных состояний подключения кWi-Fi, т. к. процесс установления соединения может занять достаточно длительное время.

Так же для работы приложения c соединениями по сети Wi-Fi необходимы дополнительные разрешения, которые указываются в файлах Androidmanifest.xml:

  • ACCESS_WIFI_STATE — для разрешения приложению получать информацию о Wi-Fi-соединении;

  • CHANGE_WIFI_STATE — для разрешения приложению изменять состояние Wi-Fi-соединения.

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

Класс LayoutParams имеет набор открытых полей, методов и констант - флагов для установки различных режимов отображения экранных элементов.

В классе предусмотрено поле screenBrightness. Это поле используется в пользовательских настройках мобильного телефона для установки общей яркости экрана и имеет тип float, изменяющийся в диапазоне от 0 (полностью темный экран) до 1 (максимальная яркость).

Значение яркости экрана, установленное в пользовательских настройках мобильного телефона, можно получить с помощью константы Settings.System.SCREEN_BRIGHTNESS и метода Settings.System.getInt() следующим образом:

Int brightness=android.provider.Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);

Сохранение настроек осуществляется методом Settings.System.putInt(), которому передается в качестве параметра новое значение яркости:

android.provider.Settings.System.putInt(getContentResolver(),

android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);

Стоит отметить, что значение яркости, получаемое из системных пользовательских настроек, является целочисленным типом и изменяется в диапазоне от 0 (полностью темный экран) до 255 (максимальная яркость), а значение для поля screenBrightness имеет тип float и изменяется в диапазоне от 0 до 1, поэтому следует в программном коде делать соответствующие преобразования при чтении и записи пользовательских настроек, а так же при установке яркости экрана.

Чтобы получить доступ к полю screenBrightness класса LayoutParams для установки текущего уровня яркости экрана, сначала получаем объект WindowManager.LayoutParams. Для этого используя метод getWindow() класса Activity, получаем объект Window, представляющий текущее окно, а затем через метод getAttributes() этого класса получаем экземпляр WindowManager.LayoutParams. Далее присваиваем полю screenBrightness новое значение яркости и изменяем яркость окна, используя метод setAttributes():

WindowManager.LayoutParams params = getWindow().getAttributes();

params.screenBrightness = 0.7;

getWindow().setAttributes(params);

Режим мониторинга

Данный режим производит анализ скорости разрядки аккумулятора. При включение режима уведомления, информирует пользователя о быстрой разрядке батареи. Скриншот режима мониторинга представлен на рисунке 4.6.

Рисунок 4.6 – Режим мониторинга

Все данные об аккумуляторной батарее мобильного устройства инкапсулированы в классе BatteryManager. Для оповещения об изменениях состояния аккумуляторной батареи система Android рассылает объекты Broadcast Intent всем компонентам, находящимся на мобильном устройстве.

Следовательно, для получения информации о состоянии батареи надо в приложении используется объект BroadcastReceiver, и созданный для него фильтр со значением Intent.ACTION_BATTERY_CHANGED. Этот фильтр нельзя задекларировать в манифесте приложения, он регистрируется с помощью метода registerReceiver() класса Context.

Объект Intent, который система передает в качестве входного параметра в метод onReceive() объекта BroadcastReceiver, зарегистрированного в приложении, имеет набор Extra-параметров, которые являются полями класса BatteryManager.

Эти Extra-параметры предоставляют информацию о технических характеристиках и состоянии аккумуляторной батареи:

  • EXTRA_SCALE - максимальный уровень заряда батареи;

  • EXTRA_LEVEL - текущий уровень заряда батареи, его величина может изменяться от 0 до EXTRA_SCALE. Обычно значения EXTRA_LEVEL и EXTRA_SCALE используют, чтобы отобразить текущий уровень заряда батареи в процентах относительно полного заряда;

  • EXTRA_TEMPERATURE - температура батареи;

  • EXTRA_VOLTAGE - уровень напряжения на батарее;

  • EXTRA_PRESENT - значение типа boolean, которое показывает наличие батареи на мобильном устройстве;

  • EXTRA_TECHNOLOGY — тип технологии этой батареи (например, "Li-Ion", если это литиевая аккумуляторная батарея);

  • EXTRA_ICON_SMALL — число, которое содержит идентификатор ресурса значка батареи. Этот значок обычно отображается в строке состояния мобильного телефона и показывает текущий уровень заряда батареи. Значок уровня заряда батареи также можно при необходимости вывести в окне своего приложения, используя этот параметр для доступа к ресурсу.

Для отслеживания состояния аккумуляторной батареи создается объект BroadcastReceiver:

BroadcastReceiver receiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

int level = intent.getIntExtra(

BatteryManager.EXTRA_LEVEL, -1);

}}

Созданный объект BroadcastReceiver регистрируется с помощью метода registerReceiver(), определив для него фильтр, чтобы при отслеживании событий, происходящих в системе, приложение "ловило" только объекты Intent, генерируемые системой при изменении состояния батареи:

registerReceiver(receiver,

new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

Для остановки отслеживания состояния аккумуляторной батареи используется вызов метода unregisterReceiver():

unregisterReceiver(receiver);

При использовании BatteryManager в приложении требуется обязательное объявление разрешения android.permission.BATTERY_STATS.

Режим автоматической оптимизации

Данный режим объединяет в себе два предыдущих, и позволяет в автоматическом режиме отключать модули и завершать приложения, не занесенные пользователем в список исключений, а так же делает яркость экрана минимальной. Скриншот режима автоматической оптимизации представлен на рисунке 4.7.

Рисунок 4.7 – Режим автоматической оптимизации