Intent filter verification service android что это такое

Полный список

— разбираемся в коде урока 21
— теория по Intent и Intent Filter
— немного о Context

На прошлом уроке (№ 21) мы создали приложение, которое содержит два Activity. Напомню, что для создания Activity, необходимо:
создать класс, с суперклассом android.app.Activity
создать Activity-запись в манифесте и указать ей созданный класс в поле Name

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

Мы использовали объект Intent. О нем можно почитать здесь, здесь и здесь. Правда инфа достаточно сложна для понимания с нуля. Я попробую своими словами объяснить.

Что такое Intent

В нашем случае Intent – это объект, в котором мы прописываем, какое Activity нам необходимо вызвать. После чего мы передаем этот Intent-объект методу startActivity, который находит соответствующее Activity и показывает его. При создании Intent мы использовали конструктор Intent (Context packageContext, Class cls) с двумя параметрами.

Первый параметр – это Context. Если помните, когда мы программно создавали View в одном из прошлых уроков, мы тоже использовали в конструкторах объект Context. Activity является подклассом Context, поэтому мы можем использовать ее – this. Вкратце, Context – это объект, который предоставляет доступ к базовым функциям приложения таким как: доступ к ресурсам, к файловой системе, вызов Activiy и т.д. Я думаю, в дальнейшем мы рассмотрим примеры, где явно увидим, зачем Context передается и как используется.

Второй параметр – имя класса. Напомню, что при создании записи Activity в манифест-файле мы указываем имя класса. И теперь если мы укажем тот же класс в Intent – то система, просмотрев манифест-файл обнаружит соответствие и покажет соответствующий Activity.

В этом можно легко убедиться. Мы удалим запись об Activity из манифест-файла и попробуем его после этого вызвать. Откройте проект из прошлого урока P0211_TwoActivity, откройте манифест-файл, вкладка Application и удалите запись об ActivityTwo с помощью кнопки Remove. Сохраните все, запустите приложение и попробуйте вызвать Activity кнопкой “Go to Activity Two”. Приложение выдаст ошибку. Если посмотреть логи, то видим следующий текст:

ERROR/AndroidRuntime(367): android.content.ActivityNotFoundException: Unable to find explicit activity class ; have you declared this activity in your AndroidManifest.xml?

(Логи — вкладка LogCat в Eclipse. Если не видно такой, то идем в меню Window -> Show View -> Other, папка Android -> LogCat )

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

Явный вызов

Вызов Activity с помощью такого Intent – это явный вызов. Т.е. с помощью класса мы явно указываем какое Activity хотели бы увидеть. Это обычно используется внутри одного приложения. Схематично это можно изобразить так:

Здесь мы создаем Intent, в качестве параметра передаем ему класс Class_B. Далее вызываем метод startActivity с созданным Intent в качестве параметра. Метод проверяет AndroidManifest на наличие Activity связанной с классом Class_B и если находит, то отображает. Все это в пределах одного приложения.

Неявный вызов

Существует также неявный вызов Activity. Он отличается тем, что при создании Intent мы используем не класс, а заполняем параметры action, data, category определенными значениями. Комбинация этих значений определяют цель, которую мы хотим достичь. Например: отправка письма, открытие гиперссылки, редактирование текста, просмотр картинки, звонок по определенному номеру и т.д. В свою очередь для Activity мы прописываем Intent Filter — это набор тех же параметров: action, data, category (но значения уже свои — зависят от того, что умеет делать Activity). И если параметры нашего Intent совпадают с условиями этого фильтра, то Activity вызывается. Но при этом поиск уже идет по всем Activity всех приложений в системе. Если находится несколько, то система предоставляет вам выбор, какой именно программой вы хотите воспользоваться. Схематично это можно изобразить так:

В Application_1 создается Intent, заполняются параметры action, data, category. Для удобства, получившийся набор параметров назовем Param_C. С помощью startActivity этот Intent отправляется на поиски подходящей Activity, которая сможет выполнить то, что нам нужно (т.е. то, что определено с помощью Param_C). В системе есть разные приложения, и в каждом из них несколько Activity. Для некоторых Activity определен Intent Filter (наборы Param_A, Param_B и т.д.), для некоторых нет. Метод startActivity сверяет набор параметров Intent и наборы параметров Intent Filter для каждой Activity. Если наборы совпадают (Param_C для обоих), то Activity считается подходящей.

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

Например, если в системе установлено несколько музыкальных плееров, и вы запускаете mp3, то система выведет вам список Activity, которые умеют играть музыку и попросит выбрать, какое из них использовать. А те Activity, которые умеют редактить текст, показывать картинки, звонить и т.п. будут проигнорированы.

Если для Activity не задан Intent Filter (Activity_24 на схеме), то Intent с параметрами ему никак не подойдет, и оно тоже будет проигнорировано.

Если проводить аналогии — можно сравнить Intent с ключом, а Intent Filter с замкОм, за которым сидит прекрасное Activity )))

Мы будем постепенно узнавать нюансы этого механизма и значения которыми заполняются параметры action, data и category в Intent и Intent Filter. Сейчас важно понять, что в случае неявного вызова одно приложение посылает Intent, а все другие сверяют его параметры со своими Activity -> Intent Filter. Intent – это базовое понятие системы Android и без него нам никуда. Оно применяется не только для Activity. Но об этом позднее.

Ну вот, хотел написать пару вводных слов, а получилось достаточно подробное объяснение со схемами и примерами ) Надеюсь, что у меня получилось донести смысл технологии Intent-ов. В дальнейшем будем практиковаться и закрепим тему.

Читайте также:  До встречи с тобой android

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

— Activity LifeCycle – поведение Activity при создании, вызове, закрытии

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

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

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

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

Источник

Давайте будем прямыми в своих intent

В Android 12 появится важное изменение, улучшающее безопасность платформы целиком и всех приложений, предназначенных для работы с этой версией ОС. Активити, сервисы и бродкаст ресиверы (broadcast receivers), в которых указаны интент-фильтры (intent-filters), должны явно обозначать, будут ли они доступны для других приложений или компонентов системы.

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

Ошибки

Если установка вашего приложения завершается одним из сообщений ниже, скорее всего, это связано с новыми изменениями.

Решение

Обе эти ошибки можно устранить, добавив атрибут `android:exported` к каждому компоненту манифеста приложения, таким как , , или , если в них объявлены свои интент-фильтры.

Но не следует бездумно добавлять `android:exported=”true”` ко всем этим элементам. Просмотрите каждый компонент, включающий в себя и спросите себя: «Хочу ли я, чтобы любое приложение, установленное на устройстве, могло запустить этот компонент?».

Ответ на этот вопрос зависит от назначения приложения, взаимодействия с ним другого ПО и иных, более специфических условий. Ниже представлены несколько распространённых примеров интент-фильтров с рекомендуемым значением exported-атрибута и объяснением выбора.

Активити с : android:exported=”true”

Скорее всего, это MainActivity вашего приложения и поскольку лаунчер в Android может быть обычным приложением, атрибут exported необходим, иначе лаунчер не сможет запустить её.

Эта активити отвечает за обработку действия «открыть с помощью» из других приложений.

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

Если сервис предоставляет другим приложениям доступ к медиа-библиотеке вашего, то он должен быть экспортированным (exported), чтобы разрешить приложениям использовать эту библиотеку. Скорее всего, такой сервис, напрямую или опосредованно, наследуется от MediaBrowserServiceCompat. Если это не так, то возможно, атрибут exported необязателен.

Это сервис Firebase Cloud Messaging, он должен наследоваться от FirebaseMessagingService и не должен быть экспортированным, поскольку Firebase может запустить компонент вне зависимости от факта его экспортации. Подробности можно узнать по ссылке: Set up a Firebase Cloud Messaging client app on Android

Система может доставлять это событие в бродкаст ресивер вне зависимости от факта экспортации.

Бэкграунд

Вплоть до Android 12, активити, сервисы и бродкаст ресиверы с обозначенным интент-фильтром автоматически становились экспортированными.

Эта активити экспортирована по умолчанию:

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

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

Внезапно появляется проблема. Наша активити, созданная исключительно для использования внутри приложения, внезапно становится экспортированной!

Но при таргете на Android 12 система предотвратит подобное поведение, требуя от нас явно указать значение атрибута android:exported. И поскольку в данном случае мы не хотим, чтобы активити была экспортирована — ставим атрибут android:exported = false, чтобы обезопасить приложение.

Для улучшения безопасности в Android 12 появится важное изменение. Приложения, у которых эта версия указана в target SDK, должны будут явно объявлять значение атрибута `android:exported` для любых активити, сервисов или ресиверов, которые используют интент-фильтры в AndroidManifest.xml. Без него приложение просто не установится.

Тщательно принимайте решение касательно значения этого атрибута и, если сомневаетесь — предпочитайте android:exported=”false”.

Для получения более подробной информации об интентах и интент-фильтрах смотрите Receiving an implicit intent.

О других изменениях безопасности и приватности читайте на этой странице.

Источник

Intent filter verification service что это

Простой компьютерный блог для души)

Приветствую друзья! Сегодня будем говорить про Андроид, а точнее про одну из неизвестных программ — Intent Filter Verification Service (com.andro >

А здесь у него вообще нулевой размер:

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

Разбираемся

Удалось выяснить, что Intent Filter Verification Service — системный сервис для проверки доступности ссылок, которые заявлены как дефолтные для некоторых приложений. Сервис используется при установке вот таких приложений. Эту инфу нашел на форуме 4PDA, инфе думаю можно доверять. Вообще вот это сообщение юзера, который видимо шарит:

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

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

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

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

Подробнее — ссылка ведет на материал Объекты Intent и фильтры объектов Intent. Важно то, что ссылка официальная, ибо сайт — developer.android.com. Поэтому при желании — можете глянуть.

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

Читайте также:  Проектор для телефонов андроид

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

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

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

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

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

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

Значит удалять как я понял — не стоит. Могут быть глюки. Дело в том, что при некоторых глюках — можно все исправить, включить приложение обратно. Но что делать, если тел будет постоянно перезагружаться? Зависать при включении? Такая проблема для вас может обернуться гемором(( Поэтому просто так, без необходимости — отключить не стоит..

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

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

Вывод

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

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

– вызываем Activity, используя неявный вызов и Intent Filter

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

На прошлых уроках мы научились вызывать Activity с помощью Intent и явного указания класса. Также мы знаем, что есть и другой способ вызова Activity – неявный. Он основан на том, что Activity вызывается не по имени, а по функционалу. Т.е. мы хотим выполнить определенные действия, создаем и настраиваем соответствующий Intent и отправляем его искать те Activity, которые могли бы справиться с нашей задачей.

Давайте посмотрим, как это реализуется на практике. Мы создадим приложение, которое будет отображать нам текущее время или дату. Сделаем мы это с помощью трех 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.startandro >

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. Но формат отображения даты будет немного другой.

Давайте создадим такое Activity, назовем его ActivityDateEx. Действия все те же самые, что и при создании ActivityDate:
– создание класса
– создание Activity в манифесте и создание для него Intent Filter (с action = ru.startandro >

Новый 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):

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

– читаем action из Intent

Присоединяйтесь к нам в Telegram:

– в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

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

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

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

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

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

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

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

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

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

  • connectivitycheck.android.com
  • streamback.ff.avast.com
  • www.google.com

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

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

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

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

Простыми словами: имеется ввиду ссылки не в прямом смысле. Например пришло сообщение с любым веб-адресом. Android должен понять — это адрес и его нужно открывать браузером. Пример #2 — пришла СМС-ка, в содержании — номер телефона. Android должен понимать — по телефону можно позвонить Скайпом, Вайбером, в итоге выдаст запрос-предложение. В данном случае веб-сайт, телефон — является ссылкой, обьектом, который должен ссылаться на соответствующее приложение для дальнейшей обработки (Скайп предложит позвонить, браузер откроет сайт). Касается и других приложений.

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

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

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

Внимание! На форуме 4PDA нашел сообщение — при попытке отключить одно из приложений EUIReceive, HwChrService, androidhwext, HwLBSService — может произойти бутлуп (цикличная перезагрузка):

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

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

Заключение

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

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

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

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

Источник

Оцените статью