Главная » Разработка для Android » Обеспечение полномочий для Приемников широковещательных намерений

0

Как и в случае с требованием  полномочий от Намерений, принимаемых Широковещательными приемниками,  вы также можете добавить  подобные требования  в сами Намерения, которые транслируете.

При вызове метода sendIntent можно указать строку с полномочием, без наличия  которого Приемник не сможет принять  данное:

sendBroadcast(myIntent, REQUIRED_PERMISSION);

Использование объекта WakeLock

С целью увеличить длительность автономной работы устройства на плат- форме Android со временем постепенно уменьшают яркость подсветки, вы- ключают экран — и в итоге отключают центральный процессор. WakeLock — объект, предоставляемый Сервисом PowerManager и позволяющий вашим приложениям управлять питанием устройства.

Объект WakeLock может использоваться для поддержания ЦПУ в рабо- чем режиме, предотвращения затухания (речь идет о случаях, когда пользова- тель, вероятно, не очень активно взаимодействует с приложением и смотрит при этом на экран, например  просматривая видео)  и выключения экрана, отключения подсветки клавиатуры.

ВНИМАНИЕ

Применение объектов WakeLock способно значительно повлиять на использование вашим приложением ресурсов батареи. На практике старайтесь задействовать WakeLock только в случае крайней необхо- димости и на протяжении короткого промежутка времени.

WakeLock также может запрещать устройству  входить в режим ожида- ния, пока идут какие-то  операции.  Чаще всего это делается  для Сервисов, запускаемых  внутри объектов IntentReceiver: они могут принимать Наме- рения, пока устройство находится в режиме ожидания. Стоит отметить, что в этом случае система будет поддерживать активное состояние устройства до тех пор, пока не завершится выполнение метода onReceive из Приемника намерений.

ПРИМЕЧАНИЕ

Если вы запустите Сервис или передадите Намерение внутри обра- ботчика onReceive, принадлежащего объекту IntentReceiver, вполне возможно, что WakeLock завершит работу еще до выполнения необхо- димых операций. Чтобы гарантировать своевременный запуск Сервиса, необходимо задать отдельный объект WakeLock.

Чтобы создать экземпляр класса WakeLock, вызовите метод newWakeLock из Сервиса PowerManager, указав один из следующих типов:

FULL_WAKE_LOCK — поддерживает максимальную установленную яркость экрана, подсветку клавиатуры и рабочий режим ЦПУ;

SCREEN_BRIGHT_WAKE_LOCK — поддерживает максимальную установленную яркость экрана и рабочий режим ЦПУ;

SCREEN_DIM_WAKE_LOCK — поддерживает работу экрана  (по- зволяя  затухание) и рабочий режим ЦПУ;

PARTIAL_WAKE_LOCK — поддерживает рабочий режим ЦПУ.

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,

"MyWakeLock");

После создания объект WakeLock нужно запустить. При необходимости вы можете задать параметр timeout,  чтобы обеспечить максимальную про- должительность работы устройства без перехода в режим ожидания. После того как все необходимые действия завершены, вызовите метод release, чтобы система могла продолжить управление  питанием устройства.

В листинге 15.3 показан типичный шаблон создания, запуска и останов- ки объекта WakeLock.

Листинг 15.3. Использование объекта WakeLock

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,

"MyWakeLock");

wakeLock.acquire();

[ … Выполнение действий, нуждающихся в сохранении рабочего режима ЦПУ … ]

wakeLock.release();

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии