做什么的目的(MyJobject为ILocalObject).GetObjectID

时间:2018-10-04 11:26:53

标签: delphi firemonkey

在delphi Tokyo源代码中,我看到了两种检索“服务管理器”

的方法
var FLocationManager: JLocationManager;
FLocationManager := TJLocationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.LOCATION_SERVICE));

和:

var FNotificationManager: JNotificationManager;
var NotificationServiceNative: JObject;
NotificationServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE);
FNotificationManager := TJNotificationManager.Wrap((NotificationServiceNative as ILocalObject).GetObjectID);

这两种方式之间到底有什么区别?为什么在第二种情况下却这样做(NotificationServiceNative 作为ILocalObject).GetObjectID ,而不是在第一种情况下?

1 个答案:

答案 0 :(得分:5)

将Java对象引用投射到ILocalObject并提取其ObjectID是使用Wrap()将对象引用转换为另一对象类型的正确方法。 / p>

但是,的更短方法起作用,因为Wrap()有一个重载,该重载将Java对象引用作为输入并在其上内部调用GetObjectID,然后调用{{1 }}就是这样。

因此,回答您的问题-并没有真正的区别。两种方法都可以。

更长的代码可能只是旧版Delphi的遗留物?我不记得是否总是存在Wrap()重载。当然,在德尔福(Delphi)对Android的早期支持中,您总是必须手动获取Wrap()ObjectID重载可能是在以后添加的,也许并不是所有的FMX代码都可以利用它。