gpt4 book ai didi

gluon-mobile - 如何在 iOS 上的 Gluon Mobile 中使用 PositionService?

转载 作者:行者123 更新时间:2023-12-04 08:51:19 27 4
gpt4 key购买 nike

我想使用 PositionService iOS 上的 Gluon Mobile。我编写了一个在桌面上运行的小型示例应用程序,提供(按预期)虚假的位置更改,并在 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.**.*'
]
}
}

最佳答案

我听从了 José Pereda 的建议并升级到了 Gluon Mobile 4。在以下步骤之后,我在 iPad 模拟器中看到了位置变化。因此,我建议任何遇到与我在问题中提到的相同困难的人,尝试升级。这解决了我的问题。

更新 build.gradle 如下:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.1.1'
}
}

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:4.0.1'
}

jfxmobile {
downConfig {
version '3.0.0'
plugins 'display', 'lifecycle', 'statusbar', 'storage', 'position'
}
android {
manifest = 'src/android/AndroidManifest.xml'
androidSdk = "/Users/thomas/Library/Android/sdk"
compileSdkVersion = 24
}
ios {
infoPList = file('src/ios/Default-Info.plist')
forceLinkClasses = [
'com.gluonhq.**.*',
'io.datafx.**.*',
'javax.annotations.**.*',
'javax.inject.**.*',
'javax.json.**.*',
'org.glassfish.json.**.*'
]
}
}

由于 Charm Down API 稍有改动,修改访问仓位服务的代码如下:
package com.thomaskuenneth.gluon.positionservicedemo;

import com.gluonhq.charm.down.Services;
import com.gluonhq.charm.down.plugins.Position;
import com.gluonhq.charm.down.plugins.PositionService;
import com.gluonhq.charm.glisten.control.AppBar;
import com.gluonhq.charm.glisten.mvc.View;
import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;

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);
Services.get(PositionService.class).ifPresent(serivce -> {
serivce.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")));
}

}

在早期版本中,似乎有必要在 src/ios/jniLibs 中包含文件 ibCharm.a。使用 Gluon 4,我在链接时一直看到错误,直到我删除了文件。我假设由于 Charm Down 的重构,该目录中不再需要 lib。

另外,请注意,您需要编辑 Default-Info.plist,正如现在关于 PositionService 的 Charm Down 文档中提到的那样。我已经在我的问题中描述了这一点。截至今天,文档没有提到考虑添加
<string>location-services</string>


<key>UIRequiredDeviceCapabilities</key>
<array>
...

但我认为如果您的应用需要位置服务并且不会运行,这可能是一个好主意。也许iOS专家可以对此发表评论,请。

关于gluon-mobile - 如何在 iOS 上的 Gluon Mobile 中使用 PositionService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39180735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com