【问题标题】:Data passing to another application in Android数据传递到 Android 中的另一个应用程序
【发布时间】:2014-08-22 04:52:00
【问题描述】:

我有两个 Android 应用程序(应用程序 A,应用程序 B),如下图所示。 我想通过单击第一个应用程序 A 的按钮来调用应用程序 B,当应用程序 B 启动时,文本框将包含我想从应用程序 A 传递的文本。

**注意-

  1. 我可以访问 Application A ,所以我可以修改 Application A 的代码。我无权访问应用程序 B。

  2. 我在 Stackoverflow.com 和其他网站上看到了许多解释将数据传递给第二个应用程序的帖子,但我发现只有当您有权修改这两个类的代码时才有可能。在我的情况下,我无法访问应用程序 2,它只是安装在我手机上的一个 APK。

  3. 我只想像我们在通过 Selenium 自动化网页时所做的那样实现,我们可以访问文本字段并在该文本字段中输入值。

  4. 应用程序 B 仅用于示例目的。它可以是任何具有文本框的应用程序。

  5. 实际上,我想在应用程序 A 的帮助下自动化应用程序(应用程序 B)的登录过程。应用程序 A 有许多凭据,通过从应用程序 A 中选择一个凭据,它将启动应用程序 B 和进入应用程序 B 的登录屏幕的凭据。 **

希望我能够解释我的问题。如果需要更多输入,我可以解释。

【问题讨论】:

  • 我非常怀疑这是可能的,除非 B 期望一个值。 A 不能随心所欲地修改 B 的观点。
  • 为什么 -1 无法理解。我有 +1 我认为这是 gud 问题
  • 使用内容提供者和广播接收者。
  • +1 表示想知道答案的问题。我认为@Bijay Koirala 在当前情况下是不可能的,但想知道专家的意见:)

标签: android android-intent selenium android-activity automation


【解决方案1】:

你有两个选择:

  • 应用程序 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
    

    你可以找到更多关于这个主题here。如果您需要帮助来编译您的应用程序,这 2 个链接将为您提供帮助:How to compile Android Application with system permissionsAndroid INJECT_EVENTS permission

【讨论】:

  • 通过您提供的链接后,似乎有可能。我可以在同一个应用程序中执行此操作,但是在调用该应用程序字段中的第二个应用程序和注入值时卡住了。
【解决方案2】:

将数据传递给以下意图。 然后从其他应用中获取。

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

【讨论】:

    【解决方案3】:

    我认为这是不可能的,因为您对应用程序 B 没有任何控制权。因为有多种方法可以从 A(意图、内容提供程序和广播接收器等)向应用程序 B 发送数据,但您没有知道 B 是否会接受这些值,并且会根据您从 A 发送的数据来操作视图,因为您无法控制 B。

    【讨论】:

      【解决方案4】:

      我只是要提醒你一下,以便你在两个你可以控制它们的应用程序之间传递数据,那么你应该使用 intent 例如

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

      并在您的其他应用程序中使用它来获取此数据

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

      【讨论】:

      • @SweetWisherツ 正如你所看到的,他已经更新了他的问题,在此之前他从未提及任何关于它的事情,正如你从我的回答中看到的那样,我故意说我只是想给你一个头脑为了让您在您可以控制它们的两个应用程序之间传递数据,那么您应该使用例如意图
      • @SweetWisherツ 正如你从他的问题中看到的那样,他忘记编辑这个 我有两个 Android 应用程序(应用程序 A,应用程序 B) 这使它更清晰,所以帮我一个忙,删除你的反对票。
      【解决方案5】:

      除非另一个应用程序设置了接收另一个应用程序值的意图,否则无法完成。如果你必须这样做,逆向工程 B 的 APK,然后添加隐式意图来处理你需要的数据形式并创建一个更新的 APK

      【讨论】:

        【解决方案6】:

        如果您尝试以自动化方式编写测试或执行某些操作(类似于 WebDriver 脚本),您可以使用 MonkeyRunner http://developer.android.com/tools/help/monkeyrunner_concepts.html,但它通过 adb 从主机远程连接到设备。

        根据应用程序 B 在这些输入字段中填充数据的方式,您可能能够与应用程序 B 的内容提供程序进行交互。在这种情况下,您可能希望与 Application B 的作者交流。

        【讨论】:

        • 在这种情况下,我不是在编写测​​试用例,而是想通过 Aoolication A 来做同样的事情。请阅读注意点:-5 以获得更多关于相同的想法。
        【解决方案7】:

        从 API 18 开始有 UiAutomation 类,它可以将自定义事件发送到其他应用程序,而无需 INJECT_EVENTS 权限。

        欲了解更多信息,请参阅http://developer.android.com/reference/android/app/Instrumentation.html#getUiAutomation()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-19
          • 1970-01-01
          • 2013-01-16
          • 1970-01-01
          • 2016-08-27
          • 1970-01-01
          相关资源
          最近更新 更多