Не найдено приложение поддерживающее ссылки intent мегафон

Обновлено: 19.09.2024

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

Есть ли способ получить имя пакета, кроме как связаться с разработчиками и спросить?

Кроме того, оказывается, что эти инструкции действительно не работают для создания веб-гиперссылок. Они дают вам URI для ссылки в строке кода Java в другом приложении для Android. Наш сайт находится в Drupal, поэтому Java не собирается работать.

Для iPhone я нашел простые инструкции для получения желаемого стиля URL/ссылки из магазина iTunes, поэтому я ищу такая информация.

Это зависит от того, откуда именно вы хотите получить информацию. У вас есть множество вариантов:

Используйте aapt из SDK, например

Это будет печатать имя пакета вместе с другой информацией.

инструменты находятся в
< sdk_home > /сборки-инструменты/android- < api_level >
или
< sdk_home > /платформенные инструменты
или
< sdk_home > /платформы/android- < api_level > /инструменты

Обновлено в соответствии с комментарием geniusburger. Спасибо!

Для отображения имен пакетов и действий в apk можно использовать следующий bash script и запустить приложение, передав ему файл APK.

apk_start.sh

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

Конечно, если вы просто хотите отобразить имя пакета и активности apk, удалите последнюю строку script.

Вы можете остановить приложение таким же образом, используя этот script:

apk_stop.sh

Важное примечание: aapt можно найти здесь:

В следующем коде перечислены:

Добавление к приведенным выше ответам:
Чтобы найти имя пакета установленных приложений на любом устройстве Android:
Переход к Хранению /Android/data/ < package-name >

Вот простой способ получить полный пакет приложений.
мы можем использовать приложение astro file manager. Вы можете получить его на рынке Android.
Astro app manager показывает нам полный пакет приложений.

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

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

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

Теперь вы можете найти имена пакетов всех приложений, установленных на вашем телефоне.

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



Объекты типа Intent могут быть использованы для общения между отдельными частями Android приложения, либо между различными приложениями системы. Мощь механизма интентов заключается в том, что с его помощью можно обращаться к любому установленному в системе приложению. Это позволяет повторно использовать некоторые компоненты и значительно сократить время на разработку.

В этой статье я покажу некоторые возможности использования класса Intent для обращения к системным приложениям.

Итак, что можно сделать с помощью Intenta:

1. Позвонить

Необходимо также добавить разрешение совершать звонки:

Либо разрешение для экстренных вызовов:

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

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

3. Получить контакт из телефонной книги

Этот код откроет стандартное приложение контактов. Метод startActivityForResult позволяет получить uri выбранного контакт из параметра Intent data переопределенного метода onActivityResult.

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

Для чтения списка контактов необходимо также добавить в манифест разрешение:

4. Открыть ссылку в браузере

Данный код откроет переданную в параметре ссылку в одном из установленных браузеров. При этом пользователь сможет сам выбрать браузер для просмотра. Eсли ссылка ведет на YouTube, то можно сразу открыть видео стандартным YouTube приложением.
С помощью этого интента можно также открыть стандартный клиент Android Market с ссылкой на какое-либо приложение. Для этого необходимо в параметр uri передать ссылку вида market://search?q=search query, где search query необходимо заменить соответствующим поисковым запросом.
Разрешения на интернет указывать не нужно, т.к. сеть используется не напрямую, а через приложение браузер.

5. Расшарить контент/написать письмо

Интенту можно задать тему и текст контента, который необходимо разшарить. Метод Intent.createChooser() создает диалог выбора соответствующего приложения.
Если необходимо разшарить медиа контент (изображение/видео), то нужно указать соответствующий тип контента в методе setType, например mailIntent.setType(«image/png»);, а также добавить сам контент в extra интента:

6. Открыть карту по определенным координатам либо запросу
  • geo:latitude,longitude
  • geo:latitude,longitude?z=zoom Параметр z — уровень зума при отображении карты (от 0 до 23)
  • geo:0,0?q=my+street+address
  • geo:0,0?q=business+near+city
7. Сделать снимок с камеры

Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult:

Изображение, полученное с камеры при этом можно сохранить в конкретной директории, добавив параметр в интент:

Для использования этого интента не нужно разрешения android.permission.CAMERA, т.к. камера используется не напрямую, а всего лишь вызывается встроенное приложение камеры. Однако рекомендуется добавить в AndroidManifest следующую строку:

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

8. Позвонить какому-либо контакту через Skype

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

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

9. Использовать Speech to Text для распознавания голоса

Этот код запускает приложение распознавания речи. Если произнести что-либо, система обработает голос и вернет результат в метод onActivityResult:

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

Я понимаю из разных источников, что мне нужно добавить фильтр намерений в действие в моем приложении с фильтром "данные", который фильтрует по URL-адресам правильной формы.

Я пробовал различные формы этих фильтров данных, например, используя один узел "данные" с обоими атрибутами:

Это просто не работает. Не знаю, что еще сказать. Я разместил простую HTML-страницу на своем веб-сайте с парой ссылок на различные страницы на этом веб-сайте (все, начиная с "http://members.iracing.com/. ") и когда я нажимаю на любой из них, они просто открываются в браузере, даже не спрашивая меня, какое приложение я хочу использовать. Я попробовал это как на эмуляторе, так и после установки приложения на моем физическом устройстве, ничего не работает. Я попробовал это в совершенно пустом, новом проекте Android, чтобы увидеть, будет ли это работать, ничего.

затем я понял, что веб-сайт требует аутентификации, и если вы не вошли в систему, он перенаправляет на страницу входа в систему по адресу https://members.iracing.com/membersite/login.jsp, поэтому я попытался заменить схему на "https". Я даже попытался сменить Хост на . www.members.iracing.com", и в конце концов я даже попробовал комбинацию всех этих вещей (не уверен, что это должно сработать, но эй, я в отчаянии на данный момент. )

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

я упускаю что-то очевидное здесь? Я вытаскиваю свои волосы, почему это не работает, и я не могу отладить его, кроме того, пытаясь каждую возможную комбинацию, которую я мог придумать (я сделал. ). Спасибо за любую помощь!

Наиболее распространённый сценарий использования намерения - запуск другой активности в своём приложении. Об этом можно почитать в соответствующем уроке.

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

Явные намерения

Вспомним код для перехода на вторую активность в своём приложении:

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

Первый параметр – это Context. Активность является подклассом Context, поэтому мы можем использовать её как HelloWorld.this, или укороченную запись this.

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

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

Также при переходе на другую активность мы можем указать какие-то данные, а принимающая активность должна уметь обработать их. Для этих целей существуют методы типа putXXX(). Например, для передачи списка файлов из одной активности в другую:

По похожему сценарию можно передать простые типы и строки.

При работе с действиями, возвращающими данные, нельзя использовать метод startActivity(), поскольку он не возвращает результат. Если вы хотите вернуть данные, то можете использовать метод startActivityForResult(), приспособленный для работы с обратными вызовами.

Неявные намерения

Существует также неявный вызов активности. В этом случае при создании намерения мы используем не имя класса, а указываем параметры action, data, category с определёнными значениями. Система анализирует, что мы тут такого понаписали и начинает подбирать подходящий вариант для запуска. Например, если указали в параметрах адрес веб-страницы, то скорее всего хотим запустить браузер и почитать новость, что Кот Ларри уволен с поста "главного мышелова" резиденции британского премьера (нехороший премьер-министр, пусть только в Москву сунется).

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

К слову сказать, мы тоже можем прописать в своей активности в фильтрах намерений (Intent Filter) набор тех же параметров: action, data, category. И тогда у пользователя может запуститься не только стандартный браузер, но и наша программа (Кот Матроскин в таких случаях говорил: Подумаешь, я еще и вышивать могу. и на машинке тоже..).

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

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

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

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

Простой пример создания намерения с предопределённым действием ACTION_VIEW для запуска браузера и перехода на нужный адрес:

В данном случае действие ACTION_VIEW означает просмотр чего-либо. Мы указали нужные данные (адрес), и происходит запуск новой активности (браузера). При этом исходная активность приостанавливается и переходит в фоновый режим. Когда пользователь нажимает на кнопку Back, то он возвращается к исходной активности. Обратите внимание, что мы нигде не указываем конкретную программу-браузер типа Chrome, Opera и т.п.

В каждом случае Android находит соответствующую активность, чтобы ответить на намерение, инициализируя её в случае необходимости.

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

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

  • Имя компонента - имя, который должен обработать намерение. Используется объект ComponentName, который является комбинацией полного имени класса целевого компонента (например, "MainActivity") и набора имени пакета в файле манифеста приложения, где компонент постоянно находится (например, "com.samples.yourproject"). Составляющее имя является дополнительным. Если оно установлено, объект Intent поставляет образцу определяемого класса. Если имя не установлено, Android использует другую информацию в объекте Intent, чтобы определить местонахождение подходящего адресата. Составляющее имя устанавливается методами setComponent(), setClass() или setClassName() и читается методом getComponent();
  • Действие - определяет действие, которое будет выполнено. Класс Intent содержит множество констант действия. Название метода определяет ряд параметров и возвращаемое значение. Вы можете также определить собственные действия для активизации активности. В этом случае вы должны включать имя пакета приложения в качестве префикса, например com.samples.yourproject.CUSTOM_ACTiON. Действие в объекте Intent устанавливается в методе setAction() и читается методом getAction();
  • Данные - это URI данных и тип MIME для этих данных. Разные активности соединены с разными видами спецификаций данных.
  • Категория - строка, содержащая дополнительную информацию о виде компонента, который должен обработать намерение. В объект Intent можно поместить любое количество описаний категорий. Класс Intent определяет несколько констант CATEGORY, например, CATEGORY_BROWSABLE
  • Дополнения - пары ключ-значения для дополнительной информации, которую нужно поставить компоненту, обращающемуся с намерением. Например, действие ACTION_TIMEZONE_CHANGED имеет дополнение time-zone, которое идентифицирует новый часовой пояс, ACTION_HEADSET_PLUG имеет дополнение state, указывающее, включены ли наушники или отключены, а также дополнение name для типа наушников. Объект Intent имеет ряд методов put. () для вставки различных типов дополнительных данных и подобного набора методов get. () для чтения данных. Дополнения устанавливаются и читаются как объекты Bundle с использованием методов putExtras() и getExtras();
  • Флаги - указывают системе, как запускать активность (например, какому заданию должна принадлежать активность) и как обработать это после того, как активность запустили (например, принадлежит ли она списку недавних активностей). Все флаги определены в классе Intent.

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

Константы действия

Константы категорий

Методы

Для работы с категориями в классе Intent определена группа методов:

  • addCategory() — помещает категорию в объект Intent
  • removeCategory() — удаляет категорию, которая была добавлена ранее
  • getCategories() — получает набор всех категорий, находящихся в настоящее время в объекте Intent

Фильтры намерений и запуск заданий

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

Задействуя фильтры намерений, приложения объявляют, что они могут отвечать на действия, запрашиваемые любой другой программой, установленной на устройстве. Чтобы зарегистрировать компонент приложения в качестве потенциального обработчика намерений, нужно добавить тег <intent-filter> в узел компонента в манифесте.

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

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

Фильтр такого вида в элементе <action> помечает активность, как запускаемую по умолчанию. Элемент <category> заставляет значок и метку для деятельности отображаться на панели Application Launcher, давая пользователям возможность запускать задание и возвращаться к этому заданию в любое время после того, как оно было запущено.

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

Принцип работы фильтров намерений

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

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

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

Используйте метод getIntent() (как правило, внутри метода onCreate()), чтобы извлечь намерение, с помощью которого компонент запущен.

Применяйте методы getAction() и getData(), чтобы найти действие и данные, связанные с намерением. Для извлечения дополнительной информации, хранящейся в параметре extras, используйте типизированные методы get<тип>Extra.

Делегирование ответственности

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

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

ACTION_PICK

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

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

Следующий код выведет диалоговое окно со списком всех возможных программ, которые могут запустить активность с данными, так как мы не указываем конкретный тип (setType("*/*")):

Если мы укажем конкретный тип данных, которые нас интересует, то список программ существенно сузится. Например, если указать intent.setType("image/*");, то можем увидеть только системную программу Галерея для просмотра картинок (у пользователя могут быть установлены программы, которые также предназначены для просмотра картинок, поэтому список может отличаться).

ACTION_SEND

Очень распространённое намерение. Используйте метод setType(), чтобы указать тип MIME для передаваемых данных. Эти данные должны храниться в параметре намерения extras с ключами EXTRA_TEXT или EXTRA_STREAM, в зависимости от типа. В случае с электронной почтой стандартное приложение в Android также принимает дополнительные параметры по ключам EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC и EXTRA_SUBJECT.

Если есть установленное приложение с фильтром, который соответствует ACTION_SEND и MIME-типу text/plain, система Android запустит его, а если будет найдено более одного приложения, то система отобразит диалог выбора, который позволяет пользователю выбрать приложение.

Если ваша активность хочет обрабатывать подобные намерения, то она должна содержать следующие данные:

Имя сообщает Android, что активность может обрабатывать ACTION_SEND.

Фильтр должен включать категорию DEFAULT, в противном случае он не сможет получать неявные намерения.

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

ACTION_GET_CONTENT

Выбрать файл

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

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

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

Диалоговое окно выбора

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

Android 12

В Android 12 немного изменились правила для фильтров к намерениями. Если их игнорировать, то можно получить ошибку в запуске приложения. Основное изменение - нужно явно указать атрибут androd:exported со значениями true или false у <activity>, <activity-alias>, <service>, <receiver>, которые имеют в своём составе intent-filter.

Не нужно всем подряд давать значение true. Это оправдано для основной активности с блоком <category android:name="android.intent.category.LAUNCHER" />, чтобы стандартный лаунчер мог запустить ваше приложение.

Также допустимо использовать true, если ваша активность использует <action android:name="android.intent.action.VIEW" />, чтобы другие приложения могли открыть ваше программу. Аналогично справедливо для случаев <action android:name="android.intent.action.SEND" /> и <action android:name="android.intent.action.SEND_MULTIPLE" />.

Другие примеры использования намерений

Запустить другую активность вашего приложения можно не только стандартным способом, о котором говорится в первом курсе, но и другим немного странным способом. Прописываем в манифесте у второй активности мета-данные:

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