【发布时间】:2016-08-27 11:41:13
【问题描述】:
我想在 iOS 上使用 Gluon Mobile 的 PositionService。我编写了一个在桌面上运行的小型示例应用程序,提供(如预期的)虚假位置更改,并在 Android 上运行。但是,在 iOS 模拟器上,不会调用侦听器。这是代码的相关部分:
public class BasicView extends View {
private static final Logger LOGGER = Logger.getLogger(BasicView.class.getName());
final Label label;
public BasicView(String name) {
super(name);
label = new Label();
VBox controls = new VBox(15.0, label);
controls.setAlignment(Pos.CENTER);
setCenter(controls);
// get current position
Platform p = PlatformFactory.getPlatform();
PositionService ps = p.getPositionService();
outputPos(ps.getPosition());
ps.positionProperty().addListener((obs, oldPos, newPos) -> {
LOGGER.log(Level.INFO, "\nobs: {0}\noldPos: {1}\nnewPos: {2}",
new Object[]{obs, oldPos, newPos});
outputPos(newPos);
});
}
private void outputPos(Position p) {
if (p != null) {
label.setText(String.format("We are currently here: %f %f",
p.getLatitude(),
p.getLongitude()));
}
}
@Override
protected void updateAppBar(AppBar appBar) {
appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> System.out.println("Menu")));
appBar.setTitleText("Basic View");
appBar.getActionItems().add(MaterialDesignIcon.SEARCH.button(e -> System.out.println("Search")));
}
}
我已经添加了 libCharm.a,但据我所知,这里不需要它。
我还发现了有关更新 info.plist 的提示,如下所示,但无论有没有它都不会调用侦听器。
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
<string>location-services</string>
</array>
...
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location is required to find out where you are</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Location is required to find out where you are</string>
我看到的关于位置的唯一输出是:
Aug 27, 2016 1:37:31 PM com.gluonhq.charm.down.ios.IOSPositionService <init>
INFO: Location Manager configured with desiredAccuracy 10.00 and distanceFilter 100.00
Aug 27, 2016 1:37:31 PM com.gluonhq.charm.down.ios.IOSPositionService <init>
INFO: Telling LocationManager to start updating location.
我想我在这里遗漏了一些东西......一如既往,非常感谢任何帮助。
编辑:抱歉,忘记了 build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.0.8'
}
}
apply plugin: 'org.javafxports.jfxmobile'
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
}
}
mainClassName = 'com.thomaskuenneth.gluon.positionservicedemo.PositionServiceDemo'
dependencies {
compile 'com.gluonhq:charm:3.0.0'
androidRuntime 'com.gluonhq:charm-android:3.0.0'
iosRuntime 'com.gluonhq:charm-ios:3.0.0'
desktopRuntime 'com.gluonhq:charm-desktop:3.0.0'
}
jfxmobile {
android {
manifest = 'src/android/AndroidManifest.xml'
compileSdkVersion = 23
}
ios {
infoPList = file('src/ios/Default-Info.plist')
forceLinkClasses = [
'com.gluonhq.**.*',
'io.datafx.**.*',
'javax.annotations.**.*',
'javax.inject.**.*',
'javax.json.**.*',
'org.glassfish.json.**.*'
]
}
}
【问题讨论】:
-
我们刚刚发布了 Charm Down 3.0.0,对库进行了全面检修。查看更新的 Gluon 示例,这些示例使用了新的 1.1.0 版本的 jfxmobile 插件。 IDE 插件也更新为使用这些版本。试一试,如果这能解决您的问题,请告诉我。
-
何塞,抱歉花了一些时间回复。我升级到了Gluon Mobile 4,也就是插件和新的Charm Down。一旦我升级了我的代码(使用服务)并应用了我在回答中提到的更改,我开始在 iPad 模拟器中看到位置变化。所以,升级到 Gluon Mobile 4 解决了我的问题。 ;-)
-
您是否导入
com.gluonhq.charm.down.plugins.*(包含PositionServices)?我在我的build.gradle文件中编译com.gluonhq:charm:4.3.7- 但我不能/不知道如何访问最新的服务 - 只能看到数量有限的服务。它们无法通过import com.*.*...(等)实现。
标签: gluon-mobile