Передача данных в другое приложение на Android

У меня есть два приложения для Android (приложение A, приложение B), как показано на рисунке ниже. Я хочу вызвать приложение B, нажав на кнопку из первого приложения A, и когда приложение B запустится, текстовое поле будет содержать текст, который я хочу передать из приложения A.

**Заметка-

  1. У меня есть доступ к Application A, поэтому я могу изменить код приложения A. У меня нет доступа к приложению B.

  2. Я видел много сообщений на Stackoverflow.com и других сайтах, которые объясняют передачу данных второму приложению, но я видел, что это возможно только тогда, когда у вас есть доступ к модификации кода обоих классов. Здесь, в моем случае, у меня нет доступа к приложению 2, это просто APK, который установлен на моем телефоне.

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

  4. Приложение B только для примера. Это может быть любое приложение с текстовыми полями.

  5. На самом деле я хочу автоматизировать процесс входа в приложение (Applicaion B) с помощью приложения A. Приложение A имеет несколько учетных данных, и, выбрав учетные данные из приложения A, он запустит приложение B и войдет в окно регистрации на экране входа в систему Приложения B. **

Введите описание изображения здесьВведите описание изображения здесь

Надеюсь, я смогу объяснить свою проблему. Если мне потребуется дополнительная информация, я могу объяснить.

У вас есть 2 варианта:

  • Приложение B ожидает ввода (через намерение). Затем вы можете запустить приложение B и передать значение с помощью намерения:

    intent.putExtra("Key", "Your data here"); 

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

  • Приложение B не ожидает ввода . Это непросто и требует root-доступа к телефону:

    С разрешением INJECT_EVENTS можно набирать текст или отправлять клики в любое окно. Вы можете сделать это:

     Instrumentation m_Instrumentation = new Instrumentation(); m_Instrumentation.sendKeyDownUpSync( KeyEvent.KEYCODE_B ); //send key B 

    Вы можете найти более подробную информацию по этой теме. Если вам нужна помощь в компиляции вашего приложения, эти 2 ссылки помогут вам: как скомпилировать Android-приложение с системными правами , разрешение Android INJECT_EVENTS

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

 PackageManager pm = context.getPackageManager(); Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName); context.startActivity(appStartIntent); 

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

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

 intent.putExtra("MyData", "This is a data "); 

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

  Bundle extras = getIntent().getExtras(); if (extras != null) { String value = extras.getString("MyData"); myText.setText(value); } 

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

Если вы пытаетесь написать тесты или сделать что-то автоматизированным способом (аналогично обходам WebDriver), вы можете использовать MonkeyRunner http://developer.android.com/tools/help/monkeyrunner_concepts.html, но он удаленно подключается к устройству Adb с главного компьютера.

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

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

Для получения дополнительной информации см. http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation ()