【问题标题】:How to extend android class with delphi xe5如何用delphi xe5扩展android类
【发布时间】:2013-10-07 15:46:00
【问题描述】:

我试图从“Androidapi.JNI.App.pas”(TJservice)扩展一个类/接口,我需要扩展这个类来提供服务。是否可以?怎么样?

some example of java/android service

我需要重写方法,例如:oncreate、onbind、ondestroy。但我不知道怎么做。

我尝试过这样的事情:

 type Tandroidservice= class(TJService)
  function onBind(intent: JIntent): JIBinder; override;
  procedure onCreate; override;
  procedure onDestroy; override;
  procedure onStart(intent: JIntent; startId: Integer); override;
 end;

出现此错误:

[DCC Error] Unit1.pas(13): E2137 Method 'onBind' not found in base class
[DCC Error] Unit1.pas(14): E2137 Method 'onCreate' not found in base class
[DCC Error] Unit1.pas(15): E2137 Method 'onDestroy' not found in base class
[DCC Error] Unit1.pas(16): E2137 Method 'onStart' not found in base class
[DCC Error] Unit1.pas(13): E2065 Unsatisfied forward or external declaration: 'Tandroidservice.onBind'
[DCC Error] Unit1.pas(14): E2065 Unsatisfied forward or external declaration: 'Tandroidservice.onCreate'
[DCC Error] Unit1.pas(15): E2065 Unsatisfied forward or external declaration: 'Tandroidservice.onDestroy'
[DCC Error] Unit1.pas(16): E2065 Unsatisfied forward or external declaration: 'Tandroidservice.onStart'

【问题讨论】:

  • CTRL+CLICK TJService,看看哪些方法被标记为virtual

标签: java android delphi class delphi-xe5


【解决方案1】:

您当前唯一的选择是从 Java 类继承,然后使用 JNI 调用 Delphi 并将线程切换到 FMX 线程。

我的 CodeRage 8 会话(截至撰写本文时的下周)展示了如何通过一项活动来做到这一点。过程大致相同。

现在这对你没有帮助,除了知道你不能直接在 Delphi 中从 Delphi for Android 中的 Java 类继承,尽管在 Delphi for iOS 中你可以从 Objective -C 类。

【讨论】:

  • 很好,我会看你的课程!但是也可以使用这种方法制作在后台工作的服务或应用程序吗?我在 embarcadero 论坛和其他论坛上看到很多人问这样的问题(例如广播接收器用于拦截事件)。
  • 我会在一两周内尝试整理一个服务或接收器示例,届时我将再次有空闲的晚上。简而言之:是的,这样做应该是非常可行的。这有点繁琐,但确实有效。
  • 好的,谢谢!我认为有了这 2 件事,我们可以在 android for delphi 上做任何事情
  • 嗯,是的,也许是这样。在某种程度上。然而,在排除纯基于表单的商业应用程序之外的这些领域变得更容易之前,尝试做“有趣”的 Android 东西是完全有成效的。
  • 谢谢!可能有点迟到了,但我最终还是到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多