我有两个Android应用程序(应用程序A,应用程序B),如下图所示。 我想通过单击第一个应用程序A中的按钮来调用应用程序B,当应用程序B启动时,文本框将包含我想从应用程序A传递的文本。
**注意 -
我可以访问应用程序A,因此我可以修改应用程序A的代码。我无法访问应用程序B.
我在Stackoverflow.com和其他网站上看过许多解释将数据传递给第二个应用程序的帖子,但我看到只有在你有权修改这两个类的代码时才有可能。在我的情况下,我无法访问应用程序2,它只是一个安装在我的手机上的APK。
我想像我们在通过Selenium自动化网页时所做的那样,我们可以访问文本字段并在该文本字段中输入值。
应用B仅用于示例目的。它可以是任何具有文本框的应用程序。
实际上我希望在应用程序A的帮助下自动执行应用程序(应用程序B)的登录过程。应用程序A具有多个凭据,并且从应用程序A中选择凭证,它将启动应用程序B和输入应用程序B的登录屏幕的凭证。 **
希望我能够解释我的问题。如果需要更多输入,我可以解释一下。
答案 0 :(得分:7)
您有两个选择:
应用程序B 需要输入(通过意图)。然后,您可以启动应用程序B并通过意图传递值:
intent.putExtra("Key", "Your data here");
您需要知道应用程序B使用哪个密钥,否则您无法执行此操作。
应用程序B 不期望输入。这并不容易,并且需要根本访问手机:
使用权限INJECT_EVENTS,可以键入文本或向任何窗口发送点击。你可以这样做:
Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendKeyDownUpSync( KeyEvent.KEYCODE_B ); //send key B
您可以在此主题here找到更多信息。如果您需要帮助来编译您的应用,这两个链接将为您提供帮助:How to compile Android Application with system permissions,Android INJECT_EVENTS permission
答案 1 :(得分:2)
将数据传递给以下意图。 然后从其他应用程序中获取它。
PackageManager pm = context.getPackageManager();
Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName);
context.startActivity(appStartIntent);
答案 2 :(得分:2)
我不认为这是可能的,因为您无法控制应用程序B.由于有几种方法可以从A(意图,内容提供商和广播接收方等)向应用程序B发送数据,但是您不知道B是否会接受这些值,并且会根据您从A发送的数据操纵视图,因为您无法控制B。
答案 3 :(得分:1)
我要给你一个抬头,以便你在两个你控制它们的应用程序之间传递数据,然后你应该使用intent
例如
intent.putExtra("MyData", "This is a data ");
并在您的其他应用程序中使用此来获取此数据
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("MyData");
myText.setText(value);
}
答案 4 :(得分:1)
除非另一个应用程序设置了接收另一个应用程序值的意图,否则无法完成。如果你必须这样做,逆向工程B的APK,然后添加隐含的意图来处理你需要的数据形式,并创建一个更新的APK
答案 5 :(得分:1)
如果您正在尝试编写测试或以自动方式执行某些操作(类似于WebDriver scirpts),则可以使用MonkeyRunner http://developer.android.com/tools/help/monkeyrunner_concepts.html,但可以通过adb从主机远程连接到设备。 / p>
根据应用程序B如何填充这些输入字段中的数据,您可以与应用程序B的内容提供商进行交互。在这种情况下,您可能希望与应用程序B的作者进行通信。
答案 6 :(得分:0)
从API 18开始,有UiAutomation类,可以将自定义事件发送到其他应用程序,而无需INJECT_EVENTS权限。
有关详细信息,请参阅http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation()