在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 ,而不是在第一种情况下?
答案 0 :(得分:5)
将Java对象引用投射到ILocalObject
并提取其ObjectID
是使用Wrap()
将对象引用转换为另一对象类型的正确方法。 / p>
但是,也的更短方法起作用,因为Wrap()
有一个重载,该重载将Java对象引用作为输入并在其上内部调用GetObjectID
,然后调用{{1 }}就是这样。
因此,回答您的问题-并没有真正的区别。两种方法都可以。
更长的代码可能只是旧版Delphi的遗留物?我不记得是否总是存在Wrap()
重载。当然,在德尔福(Delphi)对Android的早期支持中,您总是必须手动获取Wrap()
。 ObjectID
重载可能是在以后添加的,也许并不是所有的FMX代码都可以利用它。