我正在与JNI合作访问Delphi 10.2 Tokyo中的Android功能。我需要传递一个.class
类型作为Delphi函数构造函数的参数。
原始Java方法如下所示:
private Intent getServiceIntent() {
return new Intent(this, ToyVpnService.class);
}
来自Intent
构造函数的Android文档:
Intent(Context packageContext, Class<?> cls)
为特定组件创建意图。
我必须使用这个构造函数,我无法改变它。
我需要将其转换为Delphi,但我仍然坚持传递.class
类型。
现在,我的代码看起来像这样:
function TForm1.GetServiceIntent: JIntent;
begin
result := TJIntent.JavaClass.init(FContext, ???);
end;
我尝试使用Java中的ClassLoader,但是无法访问loadClass()
函数,因为它只受到包的保护。
我尝试使用Class.forName
,但无法从Path
文件中指定.class
。
我将.class
文件添加为Delphi资源文件并通过TResourceStream
加载,但找不到将此输入转换为Java Class
引用的解决方案。
答案 0 :(得分:3)
基于this answer,我猜它应该像
Intent := TJIntent.JavaClass.init(SharedActivityContext,
TJLang_Class.JavaClass.forName(StringToJString('com.example.ToyVpnService'),
True, SharedActivity.getClassLoader));