Intent filter verification service что это за программа на андроид

Обновлено: 07.07.2024

в моем приложении для android я хотел начать действие " B "с начальной активности "A". Я создал классы для обоих из них. Однако при использовании следующего кода для запуска B я получаю ошибку времени выполнения: application has stopped unexpectedly, try again . Вот мой код:

когда я добавил новую запись в AndroidManifest.xml/manifest/application/activity/intent-filers для действия B тогда приложение работало.

у меня два вопроса:

  • когда есть несколько записей действий в AndroidManifest.xml , как android знает, какая деятельность начать сначала?
  • Я не мог понять, интент-фильтры. Кто-нибудь может объяснить.

вот мой частичный AndroidManifest.xml

когда есть несколько действий записи в AndroidManifest.xml, как знает ли android, какая деятельность начнем сначала?

нет "первого". В вашем случае, с вашим манифестом, как показано, у вас будет два значка в вашей пусковой установке. Какой бы пользователь ни нажимает на тот, который запускается.

Я не мог понять, интент-фильтры. Кто-нибудь может объяснить.

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

кроме того, когда вы получаете "приложение неожиданно остановилось, повторите попытку", использовать adb logcat , DDMS или перспектива DDMS в Eclipse для изучения трассировки стека Java, связанной с ошибкой.

фильтр намерений-это выражение в файле манифеста приложения, указывающее тип намерений, которые компонент хотел бы получить.

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

AndroidManifest.в XML

Запуск HelloWorld

сначала измените xml, отметьте свое второе действие как DEFAULT

теперь вы можете инициировать эту деятельность с помощью метода StartActivity.

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

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

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

: - существует 2 вида деятельности A и B
Активность а-лаунчер на Launcher в категории намерениях и Б ребенка к активности так сделать его по умолчанию.

держите первый фильтр намерения с ключами MAIN и LAUNCHER и добавьте еще один as ANY_NAME и DEFAULT .

код LAUNCHER будет activity A и DEFAULT будет ваша деятельность B.

не может быть двух ланчеров AFAIK. Logcat-полезный инструмент для отладки и проверки состояния приложения/машины сзади. он будет автоматическим при переключении с одного вида деятельности на другой.

фильтр намерений-это выражение, которое присутствует в манифесте в вашем приложении, которое определяет тип намерений, которые должен получить компонент. Если компонент не имеет фильтра намерения, он может получить явное намерение. Если компонент с фильтром получает как неявное, так и явное намерение



Немного странно, как по мне…

Разбираемся


По поводу ссылок не особо понятно, но как я понимаю это что-то системное и вроде имеются ввиду не обычные ссылки, то есть не адрес сайта, а ссылки открытия приложения.

Описание номер два — более понятным языком. В некотором смысле эта прога позволяет системе понять — что делать с ссылкой, они ведь бывают разные.. Например пришла ссылка в смс-ке на… ну пусть будет Ютуб. Вы нажали — открылось приложение Ютуб. Второй пример — пришла ссылка на приложение Андроид, вы нажали — открылся Плей Маркет. Что-то похожее было в браузере на ПК — там где был телефон, то его сразу можно было открыть в Скайпе (хотя сейчас может тоже есть такая функция). То есть данная прога — что-то вроде обеспечивает ассоциацию ссылки с приложением, чтобы было легче, удобнее))

Доступ в интернет приложению вряд ли нужен.

Но также нашел инфу — пишет уже другой чел, что эта служба нужна для обмена данными между приложениями:

Один чел пишет — у него тормозил интернет, браузеры оч медленно работали. Что он сделал? Заморозил приложения Intent Filter Verification Service, Диспетчер телефона, Служба диспетчера телефона, после — выполнил перезагрузку. В итоге любой браузер летает по интернету. Инфа на заметку))

Внимание! У одного чела после отключения Intent Filter Verification Service телефон начал зависать на заставке. Отключение производилось штатными средствами. Вывод — возможно реально после отключения будут глюки, но они могут отсутствовать при заморозке. Так что пробовать на свой страх и риск!

Снова нашел на форуме 4PDA описание приложения, в этот раз кажется уже понятно станет:


Удалять точно нельзя. Морозить — можно пробовать. Но судя по описанию — такие ссылки будут не работать, а их работа как бы нужна получается.

Ребята — удалять нельзя, вот вам коммент:


Нашел его на форуме 4PDA.

По поводу удаления

Однако, если все же заморозить хочется — то на свой страх и риск:


  1. Вообще мастер по заморозке и отключению приложений — Titanium Backup. Но требует некого опыта и если не ошибаюсь — нужен рут-доступ.
    Для заморозки найдите приложение, потом выберите его и в окошке нажмите Заморозка. Удалять не советую — писал почему.
  2. Перед заморозкой лучше сделать бэкап. Страховка никогда не помешает.
  3. Можно попробовать заморозить без рута при помощи приложения App Freezer.

Вывод

Собственно можно сделать вывод — приложение удалять не стоит. Могут быть лаги. Морозить — можно пробовать. Но последствия — тоже не особо понятны, некоторые морозили и вроде бы лагов не было..

Надеюсь информация была полезной. Удачи и добра!

Последние уроки получились перегруженными теорией. Эту теорию необходимо понять, чтобы не было проблем с практикой. Эти темы являются основой – Task, Lifecycle, Intent. Если что-либо осталось непонятно, то вы всегда можете снова открыть и перечитать материал. А далее мы будем реализовывать примеры, которые будут эту теорию подтверждать и все станет понятнее.

Нажатие на кнопку Show time будет вызывать второе Activity, а нажатие на кнопку Show date – третье Activity. Но реализуем мы это не через прямое указание классов Activity в Intent, а через Intent Filter.

Project name: P0261_IntentFilter
Build Target: Android 2.3.3
Application name: IntentFilter
Package name: ru.startandroid.develop.p0261intentfilter
Create Activity: MainActivity

Открываем main.xml и рисуем две кнопки:

Пишем реализацию MainActivity.java:

В коде мы определили кнопки и присвоили им Activity как обработчик нажатий. В методе onCilck мы определяем какая кнопка была нажата и создаем Intent.

Если действие производится с чем-либо, то в пару к action идет еще один Intent-атрибут – data. В нем мы можем указать какой-либо объект: пользователь в адресной книге, координаты на карте, номер телефона и т.п. Т.е. action указывает что делать, а data – с чем делать.

Про data мы еще поговорим на следующих уроках, а пока будем использовать только action. Выше я уже перечислил некоторые системные action-константы, но мы можем использовать и свой action.

Как вы видите из кода, я придумал и использую такие action:
ru.startandroid.intent.action.showtime
ru.startandroid.intent.action.showdate

Первый будет означать, что я хочу вызвать Activity, которое мне покажет текущее время. Второй – Activity с датой.

Итак, мы создали Intent с action и запустили его в систему искать Activity. Чтобы Activity подошла, надо чтобы ее Intent Filter содержал атрибут action с тем же значением, что и action в Intent. Значит нам осталось создать две Activity, настроить их Intent Filter и реализовать отображение времени и даты.


Далее в Intent Filter аналогично создаем Action и в поле Name прописываем ru.startandroid.intent.action.showtime


Также в Intent Filter надо создать Category и в поле name выбрать из списка android.intent.category.DEFAULT. Пока не будем разбираться детально зачем она нужна. Но без этого вызов startActivity(Intent) не найдет Activity.


Создадим layout для нового Activity, назовем его time.xml:

Пишем код в ActivityTime.java:

Все сохраним и запустим приложение.


Жмем кнопку Show time:


отобразилось время. Т.е. Intent с action = ru.startandroid.intent.action.showtime нашел и отобразил Activity, у которого action также равен ru.startandroid.intent.action.showtime в Intent Filter.

Вернемся назад (кнопка Back) и нажмем теперь кнопку Show date. Приложение выдаст ошибку, т.к. оно не смогло найти Activity, которое соответствовало бы Intent с action = ru.startandroid.intent.action.showdate (мы создали только для showtime).


Layout-файл назовем date.xml:

Все сохраняем, запускаем приложение, жмем Show date и видим дату. Это значит, что Intent с action = ru.startandroid.intent.action.showdate нашел и отобразил ActivityDate подходящее ему по Intent Filter.

Чтобы закрепить тему, проделаем еще кое-что. Если помните, в уроке №22, где я рассказывал про Intent Filter, я говорил, что один Intent может найти несколько подходящих Activity. В этом случае пользователю предоставляется выбор, какое Activity использовать. Давайте сами спровоцируем такой случай. Мы сделаем еще одно Activity, которое будет реагировать на Intent с action = ru.startandroid.intent.action.showdate. И будет отображать текущую дату аналогично ActivityDate. Но формат отображения даты будет немного другой.

Новый layout-файл создавать не будем, используем уже существующий date.xml. В принципе, все три Activity у нас могли использовать один layout, т.к. они совершенно одинаковы – один TextView.

Как видим, отличие от ActivityDate только в формате даты.

Сохраним все и запустим. Жмем Show date и видим такой выбор:


Intent нашел два Activity, но показал для каждого из них название родительского приложения и package. В нашем случае – оба Activity из нашего приложения, поэтому текст одинаков и не разберешь, какое из них какое. Давайте пофиксим это, прописав нормальные имена.

Нажмите Back, чтобы закрыть диалог выбора. Идем в манифест и для Activity пропишем label:


Date basic для ActivityDate
Date extended для ActivityDateEx

Сохраняем и запускаем. Жмем Show date и видим такой выбор:


Так значительно лучше. Жмем Date extended и видим дату в расширенном формате на ActivityDateEx.

Итак, мы создавали и посылали Intent с action. Этот Intent находил Activity с подходящим Intent Filter и отображал его. Если находил несколько – давал выбор. Примеры отлично показывают механизм.

Если запутались, чего и где создавать, привожу скрин проекта и содержимое манифеста.


Содержимое манифеста (вкладка AndroidManifest.xml):

На следующем уроке:

Предустановленные программы на телефоне часто не имеют описания, но при этом могут позволить себе использовать ресурсы телефона. Об одном таком приложении сегодня пойдет речь — HwLBSService. Постараемся разобраться.


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

HwLBSService (com.huawei.lbs.HwLBSService), а также GeofenceService — собственные сервисы Huawei, нужны для определения местоположения смартфона во время блокировки. Соответственно могут использовать модуль GPS.

Отключение под вопросом (читать ниже).

Может активно использовать батарею. Один юзер отключил, пишет — глюков/лагов не наблюдает, телефон работает в штатном режиме, звонки принимает, GPS работает.

HwLBSService может иметь доступ к отпечатков пальцев, при этом отправлять данные на такие сервера:

Как видим — адреса легальные, вирусное/подозрительное отсутствует.

Для энергосбережения HwLBSService вроде как можно отключить.

Нашел PDF файл Декларация соответствия, в котором идет перечень приложений телефона и их описание. Присутствует и HwLBSService, в описании сказано — Intent Filter Verification Service.

Погуглив, выяснил: Intent Filter Verification Service — системный сервис проверки доступности дефолтных ссылок приложений, комментарий форума 4PDA:


Минутку! Мое мнение — HwLBSService это определение георасположения, а не Intent Filter Verification Service. Все источники мной найденные — указывают именно на первый вариант.

К сожалению информации в интернете — очень мало. Однако, скорее всего HwLBSService и правда относится к определению георасположения. Вроде можно отключить без последствий, однако бэкап Андроида перед этим все таки лучше сделать.

Как отключать/удалить?


Вывод — сперва делаем бэкап, после уже отключаем.

  1. Попробуйте отключить стандартным способом в списке приложений, если оно присутствует.
  2. Используйте титаниум (Titanium Backup) — лучшее средство для удаления, заморозки приложений, в том числе системных. Минус — нужны root-права.
  3. Можно использовать и Lucky Patcher — аналог титаниума, также умеет прекрасно морозить приложения. Нужен рут.
  4. Важно — отключение под вопросом из-за риска бутлупа. Разве что только при наличии бэкапа.

Заключение

  1. HwLBSService — сервис определения георасположения.
  2. Отключение под вопросом. Хотя юзеры писали — выключали, проблем не наблюдали. Но нет гарантий их отсутствия на вашем устройстве.

Надеюсь информация пригодилась. Удачи и добра!

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Последние уроки получились перегруженными теорией. Эту теорию необходимо понять, чтобы не было проблем с практикой. Эти темы являются основой – Task, Lifecycle, Intent. Если что-либо осталось непонятно, то вы всегда можете снова открыть и перечитать материал. А далее мы будем реализовывать примеры, которые будут эту теорию подтверждать и все станет понятнее.

Давайте посмотрим, как это реализуется на практике. Мы создадим приложение, которое будет отображать нам текущее время или дату. Сделаем мы это с помощью трех Activity:
- первое будет содержать две кнопки: Show time и Show date
- второе будет отображать время
- третье будет отображать дату

Нажатие на кнопку Show time будет вызывать второе Activity, а нажатие на кнопку Show date – третье Activity. Но реализуем мы это не через прямое указание классов Activity в Intent, а через Intent Filter.

Project name: P0261_IntentFilter
Build Target: Android 2.3.3
Application name: IntentFilter
Package name: ru.startandroid.develop.p0261intentfilter
Create Activity: MainActivity

Открываем main.xml и рисуем две кнопки:

Пишем реализацию MainActivity.java:

В коде мы определили кнопки и присвоили им Activity как обработчик нажатий. В методе onCilck мы определяем какая кнопка была нажата и создаем Intent.

Для создания Intent используем конструктор: Intent (String action). Т.е. мы при создании заполняем атрибут объекта Intent, который называется action. Это обычная строковая константа. Action обычно указывает действие, которое мы хотим произвести. Например, есть следующие системные action-константы: ACTION_VIEW - просмотр, ACTION_EDIT – редактирование, ACTION_PICK – выбор из списка, ACTION_DIAL – сделать звонок.

Если действие производится с чем-либо, то в пару к action идет еще один Intent-атрибут – data. В нем мы можем указать какой-либо объект: пользователь в адресной книге, координаты на карте, номер телефона и т.п. Т.е. action указывает что делать, а data – с чем делать.

Про data мы еще поговорим на следующих уроках, а пока будем использовать только action. Выше я уже перечислил некоторые системные action-константы, но мы можем использовать и свой action.

Как вы видите из кода, я придумал и использую такие action:
ru.startandroid.intent.action.showtime
ru.startandroid.intent.action.showdate

Первый будет означать, что я хочу вызвать Activity, которое мне покажет текущее время. Второй – Activity с датой.

Здесь надо четко понимать следующее: action – это просто текст. И я мог с таким же успехом придумать action abcdefg123456. Но текст showtime – отражает то, что я хочу сделать, он нагляднее и понятнее. А префикс ru.startandroid.intent.action я использую, чтобы не было коллизий. В системе может быть приложение, которое уже использует action showtime - я не хочу с ним пересекаться. Поэтому мой action – это ru.startandroid.intent.action.showtime.

Итак, мы создали Intent с action и запустили его в систему искать Activity. Чтобы Activity подошла, надо чтобы ее Intent Filter содержал атрибут action с тем же значением, что и action в Intent. Значит нам осталось создать две Activity, настроить их Intent Filter и реализовать отображение времени и даты.

Activity создается как обычно - создаем класс ActivityTime с суперклассом android.app.Activity и прописываем его в манифесте как Activity. После того, как прописали в манифесте, надо будет там же создать Intent Filter. Для этого выделяем ActivityTime, жмем Add, выбираем Intent Filter и жмем ОК.


Далее в Intent Filter аналогично создаем Action и в поле Name прописываем ru.startandroid.intent.action.showtime


Также в Intent Filter надо создать Category и в поле name выбрать из списка android.intent.category.DEFAULT. Пока не будем разбираться детально зачем она нужна. Но без этого вызов startActivity(Intent) не найдет Activity.


Создадим layout для нового Activity, назовем его time.xml:

Пишем код в ActivityTime.java:

Тут все просто - вычисляем текущее время и показываем его в TextView.

Все сохраним и запустим приложение.


Жмем кнопку Show time:


отобразилось время. Т.е. Intent с action = ru.startandroid.intent.action.showtime нашел и отобразил Activity, у которого action также равен ru.startandroid.intent.action.showtime в Intent Filter.

Вернемся назад (кнопка Back) и нажмем теперь кнопку Show date. Приложение выдаст ошибку, т.к. оно не смогло найти Activity, которое соответствовало бы Intent с action = ru.startandroid.intent.action.showdate (мы создали только для showtime).

Давайте создадим такое Activity, назовем его ActivityDate. Действия все те же самые, что и при создании ActivityTime:
- создание класса
- создание Activity в манифесте и создание для него Intent Filter (c action = ru.startandroid.intent.action.showdate и category = android.intent.category.DEFAULT)


Layout-файл назовем date.xml:

Код ActivityDate.java:

Все сохраняем, запускаем приложение, жмем Show date и видим дату. Это значит, что Intent с action = ru.startandroid.intent.action.showdate нашел и отобразил ActivityDate подходящее ему по Intent Filter.

Чтобы закрепить тему, проделаем еще кое-что. Если помните, в уроке №22, где я рассказывал про Intent Filter, я говорил, что один Intent может найти несколько подходящих Activity. В этом случае пользователю предоставляется выбор, какое Activity использовать. Давайте сами спровоцируем такой случай. Мы сделаем еще одно Activity, которое будет реагировать на Intent с action = ru.startandroid.intent.action.showdate. И будет отображать текущую дату аналогично ActivityDate. Но формат отображения даты будет немного другой.

Давайте создадим такое Activity, назовем его ActivityDateEx. Действия все те же самые, что и при создании ActivityDate:
- создание класса
- создание Activity в манифесте и создание для него Intent Filter (с action = ru.startandroid.intent.action.showdate и category = android.intent.category.DEFAULT)

Новый layout-файл создавать не будем, используем уже существующий date.xml. В принципе, все три Activity у нас могли использовать один layout, т.к. они совершенно одинаковы – один TextView.

Код ActivityDateEx.java:

Как видим, отличие от ActivityDate только в формате даты.

Сохраним все и запустим. Жмем Show date и видим такой выбор:


Intent нашел два Activity, но показал для каждого из них название родительского приложения и package. В нашем случае – оба Activity из нашего приложения, поэтому текст одинаков и не разберешь, какое из них какое. Давайте пофиксим это, прописав нормальные имена.

Нажмите Back, чтобы закрыть диалог выбора. Идем в манифест и для Activity пропишем label:


Date basic для ActivityDate
Date extended для ActivityDateEx

Сохраняем и запускаем. Жмем Show date и видим такой выбор:


Так значительно лучше. Жмем Date extended и видим дату в расширенном формате на ActivityDateEx.

Итак, мы создавали и посылали Intent с action. Этот Intent находил Activity с подходящим Intent Filter и отображал его. Если находил несколько – давал выбор. Примеры отлично показывают механизм.

Если запутались, чего и где создавать, привожу скрин проекта и содержимое манифеста.


Содержимое манифеста (вкладка AndroidManifest.xml):

На следующем уроке:

- читаем action из Intent

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме



Немного странно, как по мне…

Разбираемся


По поводу ссылок не особо понятно, но как я понимаю это что-то системное и вроде имеются ввиду не обычные ссылки, то есть не адрес сайта, а ссылки открытия приложения.

Описание номер два — более понятным языком. В некотором смысле эта прога позволяет системе понять — что делать с ссылкой, они ведь бывают разные.. Например пришла ссылка в смс-ке на… ну пусть будет Ютуб. Вы нажали — открылось приложение Ютуб. Второй пример — пришла ссылка на приложение Андроид, вы нажали — открылся Плей Маркет. Что-то похожее было в браузере на ПК — там где был телефон, то его сразу можно было открыть в Скайпе (хотя сейчас может тоже есть такая функция). То есть данная прога — что-то вроде обеспечивает ассоциацию ссылки с приложением, чтобы было легче, удобнее))

Доступ в интернет приложению вряд ли нужен.

Но также нашел инфу — пишет уже другой чел, что эта служба нужна для обмена данными между приложениями:

Один чел пишет — у него тормозил интернет, браузеры оч медленно работали. Что он сделал? Заморозил приложения Intent Filter Verification Service, Диспетчер телефона, Служба диспетчера телефона, после — выполнил перезагрузку. В итоге любой браузер летает по интернету. Инфа на заметку))

Внимание! У одного чела после отключения Intent Filter Verification Service телефон начал зависать на заставке. Отключение производилось штатными средствами. Вывод — возможно реально после отключения будут глюки, но они могут отсутствовать при заморозке. Так что пробовать на свой страх и риск!

Снова нашел на форуме 4PDA описание приложения, в этот раз кажется уже понятно станет:


Удалять точно нельзя. Морозить — можно пробовать. Но судя по описанию — такие ссылки будут не работать, а их работа как бы нужна получается.

Ребята — удалять нельзя, вот вам коммент:


Нашел его на форуме 4PDA.

По поводу удаления

Однако, если все же заморозить хочется — то на свой страх и риск:


  1. Вообще мастер по заморозке и отключению приложений — Titanium Backup. Но требует некого опыта и если не ошибаюсь — нужен рут-доступ.
    Для заморозки найдите приложение, потом выберите его и в окошке нажмите Заморозка. Удалять не советую — писал почему.
  2. Перед заморозкой лучше сделать бэкап. Страховка никогда не помешает.
  3. Можно попробовать заморозить без рута при помощи приложения App Freezer.

Вывод

Собственно можно сделать вывод — приложение удалять не стоит. Могут быть лаги. Морозить — можно пробовать. Но последствия — тоже не особо понятны, некоторые морозили и вроде бы лагов не было..

Надеюсь информация была полезной. Удачи и добра!

Последние уроки получились перегруженными теорией. Эту теорию необходимо понять, чтобы не было проблем с практикой. Эти темы являются основой – Task, Lifecycle, Intent. Если что-либо осталось непонятно, то вы всегда можете снова открыть и перечитать материал. А далее мы будем реализовывать примеры, которые будут эту теорию подтверждать и все станет понятнее.

Нажатие на кнопку Show time будет вызывать второе Activity, а нажатие на кнопку Show date – третье Activity. Но реализуем мы это не через прямое указание классов Activity в Intent, а через Intent Filter.

Project name: P0261_IntentFilter
Build Target: Android 2.3.3
Application name: IntentFilter
Package name: ru.startandroid.develop.p0261intentfilter
Create Activity: MainActivity

Открываем main.xml и рисуем две кнопки:

Пишем реализацию MainActivity.java:

В коде мы определили кнопки и присвоили им Activity как обработчик нажатий. В методе onCilck мы определяем какая кнопка была нажата и создаем Intent.

Если действие производится с чем-либо, то в пару к action идет еще один Intent-атрибут – data. В нем мы можем указать какой-либо объект: пользователь в адресной книге, координаты на карте, номер телефона и т.п. Т.е. action указывает что делать, а data – с чем делать.

Про data мы еще поговорим на следующих уроках, а пока будем использовать только action. Выше я уже перечислил некоторые системные action-константы, но мы можем использовать и свой action.

Как вы видите из кода, я придумал и использую такие action:
ru.startandroid.intent.action.showtime
ru.startandroid.intent.action.showdate

Первый будет означать, что я хочу вызвать Activity, которое мне покажет текущее время. Второй – Activity с датой.

Итак, мы создали Intent с action и запустили его в систему искать Activity. Чтобы Activity подошла, надо чтобы ее Intent Filter содержал атрибут action с тем же значением, что и action в Intent. Значит нам осталось создать две Activity, настроить их Intent Filter и реализовать отображение времени и даты.


Далее в Intent Filter аналогично создаем Action и в поле Name прописываем ru.startandroid.intent.action.showtime


Также в Intent Filter надо создать Category и в поле name выбрать из списка android.intent.category.DEFAULT. Пока не будем разбираться детально зачем она нужна. Но без этого вызов startActivity(Intent) не найдет Activity.


Создадим layout для нового Activity, назовем его time.xml:

Пишем код в ActivityTime.java:

Все сохраним и запустим приложение.


Жмем кнопку Show time:


отобразилось время. Т.е. Intent с action = ru.startandroid.intent.action.showtime нашел и отобразил Activity, у которого action также равен ru.startandroid.intent.action.showtime в Intent Filter.

Вернемся назад (кнопка Back) и нажмем теперь кнопку Show date. Приложение выдаст ошибку, т.к. оно не смогло найти Activity, которое соответствовало бы Intent с action = ru.startandroid.intent.action.showdate (мы создали только для showtime).


Layout-файл назовем date.xml:

Все сохраняем, запускаем приложение, жмем Show date и видим дату. Это значит, что Intent с action = ru.startandroid.intent.action.showdate нашел и отобразил ActivityDate подходящее ему по Intent Filter.

Чтобы закрепить тему, проделаем еще кое-что. Если помните, в уроке №22, где я рассказывал про Intent Filter, я говорил, что один Intent может найти несколько подходящих Activity. В этом случае пользователю предоставляется выбор, какое Activity использовать. Давайте сами спровоцируем такой случай. Мы сделаем еще одно Activity, которое будет реагировать на Intent с action = ru.startandroid.intent.action.showdate. И будет отображать текущую дату аналогично ActivityDate. Но формат отображения даты будет немного другой.

Новый layout-файл создавать не будем, используем уже существующий date.xml. В принципе, все три Activity у нас могли использовать один layout, т.к. они совершенно одинаковы – один TextView.

Как видим, отличие от ActivityDate только в формате даты.

Сохраним все и запустим. Жмем Show date и видим такой выбор:


Intent нашел два Activity, но показал для каждого из них название родительского приложения и package. В нашем случае – оба Activity из нашего приложения, поэтому текст одинаков и не разберешь, какое из них какое. Давайте пофиксим это, прописав нормальные имена.

Нажмите Back, чтобы закрыть диалог выбора. Идем в манифест и для Activity пропишем label:


Date basic для ActivityDate
Date extended для ActivityDateEx

Сохраняем и запускаем. Жмем Show date и видим такой выбор:


Так значительно лучше. Жмем Date extended и видим дату в расширенном формате на ActivityDateEx.

Итак, мы создавали и посылали Intent с action. Этот Intent находил Activity с подходящим Intent Filter и отображал его. Если находил несколько – давал выбор. Примеры отлично показывают механизм.

Если запутались, чего и где создавать, привожу скрин проекта и содержимое манифеста.


Содержимое манифеста (вкладка AndroidManifest.xml):

На следующем уроке:

Предустановленные программы на телефоне часто не имеют описания, но при этом могут позволить себе использовать ресурсы телефона. Об одном таком приложении сегодня пойдет речь — HwLBSService. Постараемся разобраться.


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

HwLBSService (com.huawei.lbs.HwLBSService), а также GeofenceService — собственные сервисы Huawei, нужны для определения местоположения смартфона во время блокировки. Соответственно могут использовать модуль GPS.

Отключение под вопросом (читать ниже).

Может активно использовать батарею. Один юзер отключил, пишет — глюков/лагов не наблюдает, телефон работает в штатном режиме, звонки принимает, GPS работает.

HwLBSService может иметь доступ к отпечатков пальцев, при этом отправлять данные на такие сервера:

Как видим — адреса легальные, вирусное/подозрительное отсутствует.

Для энергосбережения HwLBSService вроде как можно отключить.

Нашел PDF файл Декларация соответствия, в котором идет перечень приложений телефона и их описание. Присутствует и HwLBSService, в описании сказано — Intent Filter Verification Service.

Погуглив, выяснил: Intent Filter Verification Service — системный сервис проверки доступности дефолтных ссылок приложений, комментарий форума 4PDA:


Минутку! Мое мнение — HwLBSService это определение георасположения, а не Intent Filter Verification Service. Все источники мной найденные — указывают именно на первый вариант.

К сожалению информации в интернете — очень мало. Однако, скорее всего HwLBSService и правда относится к определению георасположения. Вроде можно отключить без последствий, однако бэкап Андроида перед этим все таки лучше сделать.

Как отключать/удалить?


Вывод — сперва делаем бэкап, после уже отключаем.

  1. Попробуйте отключить стандартным способом в списке приложений, если оно присутствует.
  2. Используйте титаниум (Titanium Backup) — лучшее средство для удаления, заморозки приложений, в том числе системных. Минус — нужны root-права.
  3. Можно использовать и Lucky Patcher — аналог титаниума, также умеет прекрасно морозить приложения. Нужен рут.
  4. Важно — отключение под вопросом из-за риска бутлупа. Разве что только при наличии бэкапа.

Заключение

  1. HwLBSService — сервис определения георасположения.
  2. Отключение под вопросом. Хотя юзеры писали — выключали, проблем не наблюдали. Но нет гарантий их отсутствия на вашем устройстве.

Надеюсь информация пригодилась. Удачи и добра!

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Читайте также: