Delphi调用Android SystemClock遇EJNIFatal Exception:方法未找到求助
关于Rad Studio中调用Android SystemClock.elapsedRealtime()的问题
我最近在Rad Studio 18.0里写了一段Delphi代码,想获取Android系统启动后的时间,代码本身能正常编译,但执行TimeSinceBoot函数时接连出问题:
一开始直接抛出异常,提示找不到
Androidapi.JNIMarshal.pas文件。我已经在这两个路径找到了这个文件:C:\Users\Public\Documents\Embarcadero\Studio\18.0\CatalogRepository\Android_Common_Files_Enterprise-18.0.Build.22858.6822\TARGETDIR\source\rtl\androidC:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl\android
但Rad Studio就是没法自动关联这个文件,手动把它添加到项目部署后,又出现了新错误。
新错误是EJNIFatal Exception; Invocation Error : Method can't be found,现在我搞不清楚这个“找不到的方法”到底是
ELAPSED_REALTIME还是doubleValue?
我怀疑自己一开始对ELAPSED_REALTIME的理解就错了——它应该不是一个属性,而是SystemClock类里的elapsedRealtime()函数,但我不知道在Delphi的JNI绑定里该怎么正确调用这个方法。
附上我的代码:
unit SystemClock; interface uses Androidapi.JNI.JavaTypes, Androidapi.JNIBridge; type JSystemClockClass = interface(JObjectClass) ['{7C25E65F-A934-472E-A89E-C7F1DC10A292}'] function _GetELAPSED_REALTIME: JLong; property ELAPSED_REALTIME: JLong read _GetELAPSED_REALTIME; end; [JavaSignature('android/os/SystemClock')] JSystemClock = interface(JObject) ['{DC447EEB-147B-4A9B-B59F-2C84F959B2FD}'] end; TJSystemClock = class(TJavaGenericImport<JSystemClockClass, JSystemClock>) end; function TimeSinceBoot(): Double; implementation function TimeSinceBoot(): Double; begin result:= TJSystemClock.JavaClass.ELAPSED_REALTIME.doubleValue / 60000.0; end; end.
内容的提问来源于stack exchange,提问作者IDS
相关产品推荐
相关产品推荐

