【问题标题】:onActivityResult equivalent in Delphi XE5?Delphi XE5 中的 onActivityResult 等效项?
【发布时间】:2013-09-18 22:55:27
【问题描述】:

在 android/Java 中我会这样做:

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT);

并得到结果:

@Override public void onActivityResult(int reqCode, int resultCode, Intent data)

在 Delphi 中,我有第一部分的等价物:

Intent := TJIntent.Create; 
Intent.setAction(TJIntent.JavaClass.ACTION_PICK); 
Intent.setType(TJContactsContract_Contacts.JavaClass.CONTENT_TYPE); 
MainActivity.startActivityForResult(Intent,PICK_CONTACT);

但在 MainActivity 下查看时,我没有看到“onActivityResult”回调。我看到了一个 JFragment,但似乎没有在正确的位置获取它,而且我在示例代码、在线或源代码中没有看到任何示例。

【问题讨论】:

  • 我在Androidapi.JNI.App.pas 中看到几个以startActivityForResult 结尾的条目。我还不够熟悉,无法说出它们中的任何一个是否可以满足您的需要(因此是评论而不是答案)。有什么帮助吗?
  • @Ken startActivityForResult 是您调用启动活动的方法。它就在问题中。但是询问者正在寻找一种方法来实现 onActivityResult 回调以接收结果。
  • 什么是 MainActivity?它是 Activity 的预装实现吗?它是否公开事件。 Delphi 开发人员如何包装原生 Android API?您是否希望自己从 Activity 派生?还是他们派生出一个类来为您覆盖所有虚拟 onXXX 方法和表面事件?
  • MainActivity 是一个函数调用,用于获取应用程序的 Activity。看看它的接口,它与您在 PUBLIC 部分中看到的非常匹配(我没有针对每个函数查看它)查看 android 文档的活动(几分钟前才意识到)。我猜你必须添加一个重载成员,然后从中派生应用程序,但我对 XE 的 Android 部分的工作方式还不够熟悉要做的事情。我将阅读更多的源 tmw 来尝试解决这个问题,只是看起来应该更简单
  • 顺便说一句,这无法完成,但我被告知他们正在努力从活动中获取结果。任何未由 embarcadero 专门编码的事件均不可用。所以所有的方法和函数都在那里,但事件却没有,这就是让许多 XE5 android 编码器感到沮丧的原因。

标签: android delphi delphi-xe5


【解决方案1】:

目前,您必须将编译后的 Java 类作为 Java 端的入口点 Activity 的子类,您可以在其中覆盖 onActivityResult()。 这相当混乱,需要对 classes.dex 进行 de-dexing 来获取当前的NativeActivity 子类,而您必须反过来子类化。您还必须修改清单并将正常部署的 classes.dex 替换为包含您的子类的新文件。 您可能会觉得这相当混乱,这就是为什么最好推迟到他们添加一个钩子以获得活动结果,这应该很快就会出现,希望......

【讨论】:

  • 有什么教程或例子吗?
  • 刚才我的硬盘上有一个应用程序在使用它,严格来说这不是一个有用的贡献。然而,它还不适合公众使用,主要是因为自定义构建过程在没有明显原因的情况下引入了大量的轮换失败。这真的很烦人,我还没有去追它。我希望为我的 CodeRage 8 演讲做好准备,但这取决于我如何解决问题。
  • 实际上,旋转问题是无关的——这是由应用程序中的其他问题引起的。在 2013 年 10 月 17 日的 CodeRage 8 会话中,将有一个实现 onActivityResult 的示例。这是我目前所能提供的最好的。
  • 我在提到的谈话之后很久才写了这篇文章。您可以在 blong.com/Articles/DelphiXE5AndroidActivityResult/… 找到在 Delphi XE5 中执行此操作的冗长步骤,在 blong.com/Articles/DelphiXE6AndroidActivityResult/… 找到在 Delphi XE6 中相当简单的等价物
【解决方案2】:

这是一个很好的评论,我不知道它是否和 Intent 一样。

http://www.pclviewer.com/android/androidJNI.html

http://www.pclviewer.com/android/XE5.pdf

【讨论】:

  • 这将探索如何利用额外的已编译 Java 代码,这在 Android 中尚不可用。因此,它解释了如何导入其他 Java 库。它并没有真正进一步搜索响应已启动的 Intent/activity 结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多