Как в с вызвать другое приложение
Я хочу запустить установленный пакет из моего приложения для Android. Я предполагаю, что это возможно, используя намерения, но я не нашел способ сделать это. Есть ли ссылка, где найти информацию?
что произойдет, если я открою второе приложение из первого, а затем щелкну непосредственно по значку второго приложения, я получу два экземпляра приложения, что нежелательно. Как им управлять?Если вы не знаете основной вид деятельности, то для запуска приложения можно использовать имя пакета.
Любая причина, почему это не будет работать? Я не заставил это работать по крайней мере. Он запускает новое намерение, как насчет возобновления приложения, которое находится в фоновом режиме? @andep: Это хорошо сработало, когда я тестировал между двумя приложениями, которые создал сам. Если я знаю, что имя пакета будет работать всегда, или есть способ предотвратить запуск вашего приложения кем-либо (в манифесте или где-то еще)? @ Леонард: Мое первое впечатление, что оно всегда должно работать, потому что имена пакетов общедоступны, поэтому любые приложения могут их прочитать. Из ваших приложений я думаю, что вы не можете определить, откуда он был вызван, но ваше приложение может определить, что его нельзя вызвать с помощью основного действия только через сервисы. Да, это может вернуть ноль. «Текущая реализация сначала ищет основное действие в категории CATEGORY_INFO , а затем основное действие в категории CATEGORY_LAUNCHER . ВозвращаетЯ знаю, что на это ответили, но вот как я реализовал нечто подобное:
Еще лучше, вот метод:
Удален повторяющийся код:
У меня возникла проблема при запуске Intent для профиля в Facebook или Twitter. Они открывались внутри моего приложения, а не как новый вид деятельности. Добавление FLAG_ACTIVITY_NEW_TASK исправило это. Спасибо! Нет проблем! У меня были проблемы с чем-то очень похожим Метод работает для меня, но иногда новое приложение открыто, и вызывающая активность все еще остается на переднем плане. Есть идеи как починить? Работает только для релизных версий. Если вы пытаетесь открыть приложение отладки, намерение будет нулевым.Я нашел решение. В файле манифеста приложения я нашел имя пакета: com.package.address и имя основного действия, которое я хочу запустить: MainActivity Следующий код запускает это приложение:
я получил исключение «доза, которую вы объявляете активностью в вашем Manifest.xml» Этот способ возвращает исключение, которое говорит, что мне нужно объявить активность в моем манифесте . но это внешнее приложение! Как запустить его в фоновом режиме? Означает, что вызываемые приложения не отображаются на экране, но запускают метод onCreated (). Я получаю эту ошибку, когда пытаюсь запустить приложение мгновенно: не разрешено начинать работу. Намерение @ Бастиан, как закрыть текущее приложение, откуда мы вызываем намерение открыть другое приложение?Вот мой пример запуска сканера штрих-кода / QR-кода из моего приложения, если кто-то находит это полезным
Редактировать в зависимости от комментария
В некоторых версиях - как предлагается в комментариях - выбрасываемое исключение может быть другим.
Таким образом, решение ниже немного изменено
Оригинальный ответ
Несмотря на хороший ответ, есть довольно простая реализация, которая обрабатывает, если приложение не установлено. Я делаю это так
У меня есть два приложения для Android, предположим, что они "A" и "B", "A"имеет пять действий, и я хочу вызвать его конкретную активность из события нажатия кнопки "B". Я протестировал этот способ вызова одного приложения из другого:
"ком.файла testapp.с WS" имя пакета "а".
это запускает " A " из своего первого действия снова не из определенного действия. Как я могу назвать указанное действие A?
проблема здесь явно недоразумение модели приложения для Android. Commonsware абсолютно правильно о том, как решить эту проблему. Однако, не понимая основ Android, я понимаю, почему у вас возникли трудности с его применением. Итак, краткое объяснение:
каждое действие в Android начинается с намерения. Особенно это касается деятельности. Каждое действие имеет цель. Чтобы сделать интерфейс простым для разработчиков, вы может отвечать на намерение из ОС, или вы можете создать намерение из класса Activities для использования. В общем, лучше всего сделать первый вариант.
отвечая на намерение
выбирая намерение для ответа, вы можете буквально реагировать на любое намерение. Это называется действием. Если я создал намерение под названием "FOO", активность бара может поднять его и ответить. Однако у нас есть соглашения, и основное из них-добавить ваши имя пакета для любого намерения, которое вы делаете. Например, "com.компания.пакет.FOO." Проще говоря, это значит, что мы избегаем столкновений с другими приложениями.
каждое действие может реагировать на различные события. Это определено в AndroidManifest.XML.
выше, мы также установить категорию по умолчанию, так что, если пользователь не изменяет его, мы будем единственным приложением, которое отвечает на наши пользовательские намерения. Затем мы вызываем намерение, используя то же имя, которое мы создали (т. е. "com.компания.пакет.FOO")
вот как это работает! Вы просто измените вышеуказанный " com.компания.пакет.FOO " к вашему имени пакета (определенному вашим приложением) и что-то значимое. Пример "ком.файла testapp.с WS.SWAT_FLIES".
почему ваш код не работает
приведенный выше код ищет конкретный вид действия намерения. Помните, когда вы сделали AndroidManifest и первое действие вы поставить:
Читайте также: