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

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

для запуска явлений: Явления (объект типа Activity) представляют отдельный экран приложения. Вы можете запустить новый экземпляр явления, передав объект Intent в метод startActivity(). Объект Intent описывает явление для запуска и другие необходимые данные.

Если вы хотите получить результат выполнения явления, используйте метод startActivityForResult(). Ваше явление получит результат в виде другого объекта типа Intent, который будет передан в метод обратного вызова onActivityResult(). Подробная информация содержится в разделе Явления.

для запуска сервисов: Сервис (объект типа Service) это компонент, который выполняет работу в фоновом режиме и не предоставляет пользовательский интерфейс. Вы можете запустить сервис для выполнения одноразовой операции (вроде загрузки файла), передав объект Intent в метод startService(). Намерение описывает сервис для запуска и другие необходимые данные.

How To Fix Intent Filter Verification Service Problem Solve in Android

Подробная информация содержится в разделе Сервисы. для передачи широковещательных сообщений: Широковещательные сообщения могут быть получены любым приложением. Система передает различные сообщения о системных событиях, например при загрузке устройства или при подключении зарядного устройства. Вы можете передавать широковещательные сообщения другим приложениям, передав объект Intent в метод sendBroadcast(), sendOrderedBroadcast() или sendStickyBroadcast().

Типы намерений

Есть два типа намерений:

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

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

Рисунок 1. на рисунке показано, как неявные намерения проходят через систему для запуска других явлений: [1] Явление А создает намерение и передает его в метод startActivity(). [2] Система Android ищет приложения, которые имеют фильтры, совпадающие с переданным намерением и если находит, [3] система запускает явление В с помощью вызова onCreate() и передав в него намерение.

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

Android – Фильтр намерений

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

Внимание: чтобы гарантировать безопасность приложения, всегда используйте явные намерения для запуска сервисов и не объявляйте для сервисов фильтры. Использование неявных намерений для запуска сервисов небезопасно, поскольку вы не сможете быть уверены, что сервис реагирует на намерения, а пользователь не сможет увидеть какой сервис запущен. Начиная с Android 5.0 (API 21), система выбрасывает исключение при передаче в метод bindService() неявного намерения.

Создание намерения

Объект типа Intent несет в себе информацию, которую Android использует чтобы определить компонент для запуска (явное имя компонента или категория), а также информацию, которую получатель использует, чтобы корректно выполнить заданное действие.

Вот основная информация в намерениях:

Имя компонента

Имя компонента, который должен быть запущен.

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

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

Читайте также:
Pms программа что это

Это поле намерения является объектом типа ComponentName, в котором может быть указано полное имя класса компонента, включая название пакета. Например, com.example.ExampleActivity . Вы можете установить имя компонента с помощью методов setComponent(), setClass(), setClassName() или используя конструктор класса Intent.

Действие

Строка, которая указывает общее действие для выполнения (например “показать” или “выбрать”)

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

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

ACTION_VIEW Используется для получения информации, которая может быть отображена явлением, например фотографии или точка на карте. ACTION_SEND Также известное как намерение “share” (поделиться), которое вы можете использовать для того, чтобы поделиться некоторыми данными через другое приложение, например добавить вложение в почтовом клиенте или фотографию в приложении социальной сети.

Остальные константы действий смотрите в документации по классу Intent. Есть также действия, которые описаны в других классах. Например класс Settings содержит описание действий для открывания конкретных страниц приложения Настройки.

Вы можете указать действие для намерения с помощью метода setAction() или в конструкторе.

Если вы описываете собственные действия, убедитесь, что добавили в качестве префикса название пакета, например:

static final String ACTION_TIMETRAVEL = «com.example.action.TIMETRAVEL» ;
Данные

URI (объект типа Uri) ссылается на данные, которые должны быть обработаны, и на MIME тип этих данных. Тип предоставленных данных, как правило, зависит от указанного действия. Например, если указано действие ACTION_EDIT, данные должны содержать URI документа для редактирования.

При создании намерения часто требуется кроме URI указать также тип данных. Например, явление, которое может показать картинку, вероятно не способно воспроизвести звуковой файл, даже если указать похожий URI. Указание MIME типа помогает системе Android искать подходящие компоненты для передачи в них намерения. Однако, иногда можно сделать вывод о MIME типе из URI. В частности, если предоставлен URI типа content: , который указывает, что данные находятся на устройстве и управляются поставщиком содержимого, это делает MIME тип видимым для системы.

Чтобы задать только данные, используйте метод setData(). Чтобы установить тип, используйте метод setType(). Разумеется, можно установить и то и другое с помощью метода setDataAndType().

Внимание: если вы хотите установить и URI и MIME тип, не используйте по отдельности методы setData() и setType(), поскольку они затирают значение друг друга! Всегда в таких случаях используйте метод setDataAndType().

Категория

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

Вот наиболее распространенные категории:

CATEGORY_BROWSABLE Явление позволяет запускать себя из web-браузера для того, чтобы показать данные, на которые указывает ссылка, например картинку или email-cообщение. CATEGORY_LAUNCHER

Явление является стартовым для приложения и должно быть показано в списке приложений.

Полный список категорий смотрите в документации класса Intent.

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

Однако, намерения могут нести в себе дополнительную информацию, которая не влияет на выбор компонента для запуска:

Расширенные данные (extras)

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

Вы можете добавить расширенные данные с помощью метода putExtra(), который принимает два параметра: название ключа и значение. Вы можете использовать объект типа Bundle, который содержит все данные, и добавить его к намерению с помощью метода putExtras().

Например, при создании намерения с действием ACTION_SEND для отправки письма, вы можете указать получателя, используя ключ EXTRA_EMAIL и тему, используя ключ EXTRA_SUBJECT.

Класс Intent содержит множество констант EXTRA_* для стандартных типов данных. Если вам нужен собственный ключ (для намерений вашего приложения), убедитесь, что добавили к его имени префикс с названием пакета:

static final String EXTRA_GIGAWATTS = «com.example.EXTRA_GIGAWATTS» ;
Флаги

Флаги определены в классе Intent и нужны в качестве мета-данных для намерений. Флаги могут указывать системе Android как запускать явление (например, какая задача должна относиться к явлению) и как к нему относиться после запуска (например, нужно ли помещать его в список последних приложений).

Подробную информацию смотрите в документации к методу setFlags().

Пример явного намерения

Явное намерение это компонент, который вы используете для запуска конкретного компонента приложения, вроде явления или сервиса вашего приложения. Для создания явного намерение, укажите имя компонента для объекта типа Intent – остальные параметры необязательны.

Например, если вы создали сервис для приложения, который называется DownloadService и служит для скачивания файла из сети, вы можете запустить его с помощью следующего кода:

Читайте также:
Magic photo recovery что это за программа

// Код выполняется в классе Activity, так что ‘this’ является контекстом
// В переменной fileUrl хранится, соответственно URL файла, вроде «http://www.example.com/image.png»
Intent downloadIntent = new Intent ( this , DownloadService . class ) ;
downloadIntent . setData ( Uri . parse ( fileUrl ) ) ;
startService ( downloadIntent ) ;

В данном примере используется конструктор Intent(Context, Class), который принимает в качестве параметров контекст (объект типа Context) приложения или объект типа Class. Таким образом, данное намерение запускает класс DownloadService в приложении.

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

Пример неявного намерения

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

Например, у вас есть данные, которым пользователь может поделиться с другими людьми. Вы создаете неявное намерение с действие ACTION_SEND и добавляете расширенные данные, указывающие на содержимое, которое должно быть расшарено. После вызова метода startActivity() пользователь сможет выбрать приложение, которое разместит общие данные.

Внимание: возможно на устройстве нет приложений, которые могут обработать неявное намерение, которое вы передали. В таких случаях приложение аварийно завершится. Поэтому необходимо использовать метод resolveActivity(), чтобы убедиться, что есть по крайней мере одно явление, которое может обработать указанное намерение. Если метод вернет значение, отличное от null , можете смело вызывать метод startActivity(). Если результат равен null , вы не должны использовать данное намерение и можете даже запретить функцию, которая его использует.

Источник: easyandroid.ru

Получаем пользовательские данные на Android с экранов сторонних приложений

С версии 1.6 в Android существует «сервис специальных возможностей». Нетрудно догадаться, с какой целью он был создан, но нас, как людей, стремящихся как раз к неограниченным возможностям, этот сервис интересует с несколько другой стороны. Сегодня мы будем писать программу, которая позволит следить за вводом в других приложениях!

Зачем нужен сервис специальных возможностей?

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

В Android есть стандартный сервис спецвозможностей — TalkBack. При необходимости разработчики могут реализовать и свои собственные. Такие сервисы стало возможно писать с незапамятных времен (Android 1.6, API уровень 4), а с Android 4.0 (API уровня 14) они получили значительные улучшения. Через «библиотеку поддержки» эти улучшения реализованы и для устройств с API версией ниже 14.

Данный сервис позволяет просмотреть описание всех окон, работающих приложений и получить набранные пользователем данные (кроме вводимых паролей; согласись, что логинов и текстовых сообщений тоже во многих случаях достаточно).

В этой статье я расскажу, как максимально просто реализовать сервис для перехвата клавиатурного ввода.

WWW


Хороший пример сервиса ты можешь найти здесь

Для этого требуется создать наследник AccessibilityService . В методе подключения onServiceConnected нам нужно задать фильтр событий (класс AccessibilityServiceInfo) , которые будет слушать сервис. А в методе onAccessibilityEvent обрабатывать эти события.
В манифесте приложения обязательно следует добавить строчки описания сервиса:

Если все сделано верно, то в логе можно увидеть что-то вроде этого:

onAccessibilityEvent: [type] TYPE_VIEW_TEXT_CHANGED [class] android.widget.EditText [package] com.android.chrome [time] 113326642 [text] xakep.ru

Класс AccessibilityServiceInfo позволяет выставить фильтры для определенных приложений (кто сказал «мобильных банков» или «клиентов социальных сетей»?). По нужному нам событию можно делать скриншоты.
Совсем просто это делается на рутованном устройстве, а если рута нет, то нужно искать сторонние библиотеки для получения скриншотов из сервиса.
Пример кода получения скриншота из сервиса на рутованном устройстве:

Process sh = Runtime.getRuntime().exec(«su», null, null); OutputStream os = sh.getOutputStream(); os.write((«/system/bin/screencap -p » + «/sdcard/img.png»).getBytes(«ASCII»)); os.flush(); os.close(); sh.waitFor(); // Then read img.png as bitmap and convert it jpg as follows Bitmap screen = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + File.separator + «img.png»); // My code for saving ByteArrayOutputStream bytes = new ByteArrayOutputStream(); screen.compress(Bitmap.CompressFormat.JPEG, 15, bytes); // You can create a new file name «test.jpg» in sdcard folder. File f = new File(Environment.getExternalStorageDirectory() + File.separator + «test.jpg»); f.createNewFile(); // Write the bytes in file FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); // Remember close de FileOutput fo.close();

Для работы сервису требуется отдельное разрешение, пользователь дает его в разделе настроек «Спец. возможности -> Службы».

Настройки доступа спецсервисов

Другие статьи в выпуске:

Хакер #202. Скажи нет большому брату!

  • Содержание выпуска
  • Подписка на «Хакер» -60%

Запускаем настройки программно:

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivityForResult(intent, 0);

Запрос доступа к сервису спецвозможностей

В старых версиях Android (которых еще довольно много в дикой природе) пользователя можно было и не спрашивать. Такие права можно было задать программно:

Settings.Secure.putString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, «pkgname/classname»); Settings.Secure.putString(getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, «1»);

Разрешения для манифеста:

где pkgname — имя твоего пакета и classname — имя класса сервиса. В новых версиях ОС без согласия пользователя не обойтись.

Заключение

С точки зрения программиста, Accessibility Services позволяет немного расширить узкие рамки песочницы для взаимодействия с другими приложениями. Пользователя можно просто попросить дать доступ к спецвозможностям и таким образом получить доступ к данным других программ. Также стоит отнестись внимательно к сервису TalkBack, который озвучивает все элементы экрана, беря описание из свойства contentDescription. Компания Google дает приоритет в поисковой выдаче маркета тем приложениям, которые более оптимизированы для TalkBack.

Читайте также:
Он клик что за программа

Пользователям же, как всегда, советуем три раза подумать, устанавливать ли вообще новое приложение, а если и устанавливать, то какие права ему дать. В последней версии Android 6.0 это можно делать более гибко.

Источник: xakep.ru

Знакомство с Android Intent. Запуск Activity с помощью Intent

Знакомство с Android Intent. Запуск Activity с помощью Intent | Prologistic.com.ua

В нашем последнем уроке по Android, мы создавали наше первое приложение Android Hello World. В этом Android уроке мы углубимся в изучение основ и познакомимся с таким полезным Android-механизмом как Intent, а именно что это такое, зачем оно и как его использовать.

Что такое Intent в Android?

Android Intent (возможен еще дословный вариант перевода, как «Намерение», однако я предпочитаю использовать слово в оригинале Intent или читать как «интент»). И так, Intent представляет собой структуру данных, содержащую описание операции, которую следует выполнить.
Одна из наиболее мощных функций Intent механизма в том, что вы можете асинхронно отправить сообщения другим Activity (активностям) или сервисам.
В этом уроке мы сделаем акцент на типах и обработке Android Intent (намерений).

Типы Android Intent

  • Явное намерение (Explicit intent) явно определяет компонент по имени. Чаще всего в наших приложениях мы будем использовать явное намерение для запуска какого-то компонента. Суть Explicit intent в том, что вы знаете имя класса Activity или Service (сервиса), который нужно запустить. При использовании явного намерения система немедленно запускает компонент приложения, указанный в объекте Intent .
  • Неявное намерения (Implicit intent) не определяет конкретный компонент, а просто заявляет о некотором действии, позволяя компонентам других приложений его обработать. При создании неявного намерения Android система находит все возможные компоненты, которые могут обрабатывать заявленное действие, и предлагает выбрать одно из найденного списка.

Как использовать Android Intent для запуска Activity?

Чтобы создать объект Intent и запустить с помощью него Activity , нужно в параметрах передать объект-Activity класса, который вызывает и имя Activity, которое нужно запустить:

Источник: javadevblog.com

Что такое фильтры намерений в Android?

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

Intent myIntent = new Intent(this, AddNewActivity.class); startActivity(myIntent);

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

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

задан 23 июля ’10, 16:07

10 ответы

Когда в AndroidManifest.xml есть несколько записей действий, как Android узнает, какое действие начинать первым?

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

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

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

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

Создан 23 июля ’10, 21:07

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

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

AndroidManifest.xml

Запустить HelloWorld

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse(«http://androidium.org»)); startActivity(intent);

ответ дан 23 дек ’17, 12:12

Простой. Четкое объяснение того, что такое фильтр намерений. Это отвечает на вопрос в заголовке этой ветки. — Sparky1

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

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

ответ дан 22 дек ’15, 08:12

Источник: stackovergo.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru