Приложение в приложении

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

Итак, в ландшафтном режиме он должен выглядеть примерно так:

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 для получения дополнительных уроков о намерениях