将Java .class文件传递给Delphi Constructor

时间:2017-08-03 14:22:56

标签: java android delphi java-native-interface delphi-10.2-tokyo

我正在与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引用的解决方案。

1 个答案:

答案 0 :(得分:3)

基于this answer,我猜它应该像

Intent := TJIntent.JavaClass.init(SharedActivityContext,
  TJLang_Class.JavaClass.forName(StringToJString('com.example.ToyVpnService'),
  True, SharedActivity.getClassLoader));