Приложение в приложении
Возможно ли запустить приложение из другого приложения? Я хочу написать приложение, которое позволяет вам выбрать приложение для запуска, а затем отображает действия этого приложения внутри представления.
Итак, в ландшафтном режиме он должен выглядеть примерно так:
![enter image description here]()
Идея заключается в следующем:
Я хочу, чтобы иметь возможность запускать и запускать действия третьей стороны рядом с моей собственной деятельностью, и я хочу иметь возможность создавать отдельные макросы с моей деятельностью, которые контролируют деятельность третьей стороны.
В принципе, что-то вроде этого:
- Начать работу третьих сторон внутри моего приложения.
- Запустить запись макроса
- Сделайте что-то в сторонней деятельности
- Остановить запись макроса
- Используйте makro, когда пожелаете
Итак, как я могу начать и контролировать другую активность изнутри своей собственной деятельности?
Ответы
Ответ 1
некорневых:
К сожалению, то, что вы хотите достичь, кажется невозможным без укоренения телефона, потому что вы можете взаимодействовать только с другими приложениями. Поскольку разработчики решают, как их приложения реагируют на конкретные намерения, создание макросов таким образом почти невозможно.
С корневыми телефонами:
-
Вы можете создать список всех установленных приложений, вы можете использовать
getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);
чтобы получить список всех установленных приложений.
- Если пользователь теперь выбирает приложение, запустите его с помощью намерения и создайте системный оверлей, чтобы получить все события касания/клавиши (и пусть пользователь остановит макрос). Вы можете найти способ сделать это здесь. Сохраните значения x/y для сенсорных событий.
- Вы можете воссоздать события с помощью
MotionEvent#obtain
.
-
Теперь идет часть, где вам нужен корневой телефон (разрешение INJECT_EVENTS). Запустите приложение и введите события, чтобы ваш макрос был выполнен. Samplecode:
Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendPointerSync(motionEvent);
Вы можете найти дополнительную информацию об инъекциях (также keyevents) здесь.
-
Если вам нужна помощь в компиляции вашего приложения, эти 2 ссылки помогут вам: Как скомпилировать Android-приложение с системными правами, Объявление Android INJECT_EVENTS
Ответ 2
Невозможно запустить приложение в View
, но вы можете запустить приложение из своего приложения:
Intent i = getPackageManager().getLaunchIntentForPackage("com.package.ofapp");
startActivity(i);
//ИЗМЕНИТЬ ваш обновленный вопрос:
После запуска активности из вышеприведенного кода одним из способов запуска/остановки макроса в любое время в новом приложении было бы создание небольшого оверлея над верхней частью экрана.
Это оверлей будет поверх всех видов деятельности.
Обратите внимание на следующую ссылку: Создание окна оверлея системы (всегда сверху)
Вы можете написать код, чтобы запустить макрос при нажатии кнопки "Вид", а затем, если кнопка была нажата один раз, а пользователь снова нажимает ее, остановите макрос. Это будет в методе onTouchEvent()
.
Ответ 3
Вы можете запустить мероприятие из своего приложения, как описано в этом. Также сайт разработчика предоставляет вам подробную информацию о том же. Попробуйте http://developer.android.com/training/basics/intents/index.html.
Шаги:
1) Создайте намерение сделать это как показано здесь. Передача параметров, необходимых для этого приложения.
2) Verify есть ли у нас приложение, чтобы соответствовать нашей цели.
3) Создать намерение и начать действие. Если вы хотите вернуть некоторые данные из активности, перейдите на метод startActivityResult.
4) Покажите выбор приложения, если есть несколько приложений, которые могут соответствовать нашей цели.
5) Получить результат. И обработать его согласно вашему требованию.
Ответ 4
Да, это возможно, если вы используете намерения. Они позволяют перемещаться между экранами и запускать другую функциональность внутри одного и того же приложения. посетите coursera для получения дополнительных уроков о намерениях