我得到了这段代码编译,但是当在C ++代码中执行TimeSinceBoot函数时,一个异常告诉我没有找到Androidapi.JNIMarshal.pas文件。
代码:
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.
我在这些目录中找到了这个文件:
C:\用户\公用\文档\ Embarcadero公司\工作室\ 18.0 \ CatalogRepository \ Android_Common_Files_Enterprise-18.0.Build.22858.6822 \ TARGETDIR \源\ RTL \机器人
C:\ Program Files(x86)\ Embarcadero \ Studio \ 18.0 \ source \ rtl \ android
所以我不太明白为什么Rad Studio无法单独链接文件。
现在,我已经在项目的部署文件中添加了该文件,在执行该函数时,我收到错误:
EJNIFatal例外;调用错误:无法找到方法
似乎我的函数调用了这个api,即使我没有使用它,但它找不到它想要使用的方法失败了?
我想知道“找不到的方法”是指qazxsw poi还是qazxsw poi。
我怀疑ELAPSED_REALTIME
是一个值,但我不知道如何在doc中使用SystemClock的.doubleValue
函数。
我目前正在使用这些链接作为参考:
ELAPSED_REALTIME
elapsedRealtime()
这是(稍微修改过的版本)Java2OP(随Delphi附带)为SystemClock类导入的内容:
https://developer.android.com/reference/android/os/SystemClock.html