我希望能够从笔记本电脑上测试Gluon PositionService。这可能吗?查看运行时依赖项,iOS和Android都包含此jar文件。但桌面依赖项没有它。
能够从笔记本电脑测试此服务的解决方法是什么?我只是希望能够立即将位置打印到控制台。这是我笔记本电脑的限制吗?
答案 0 :(得分:1)
鉴于笔记本电脑/台式机没有配备GPS传感器,实施DesktopPositionService
毫无意义。
但是,如果您只是想在笔记本电脑上测试移动设备的代码,则可以轻松创建一个伪造的任务,在一段时间后随机提供新的位置。
有两种简单的方法可以在桌面上模拟PositionService
。
一,只需提供一个替代实际上没有PositionService
实现的情况:
Services.get(PositionService.class)
.map(s -> {
// Mobile - real implementation
s.positionProperty().addListener((obs, ov, nv) ->
System.out.println(String.format("Lat: %.6f, Lon: %.6f", nv.getLatitude(), nv.getLongitude())));
return s.getPosition();
}).orElseGet(() -> {
if (Platform.isDesktop()) {
// Desktop - Mock implementation
PauseTransition pause = new PauseTransition(Duration.seconds(5));
pause.setOnFinished(t -> {
System.out.println(String.format("Lat: %.6f, Lon: %.6f", new Random().nextFloat() * 100, new Random().nextFloat() * 100));
pause.playFromStart();
});
pause.play();
}
return null;
});
两个,在Charm Down中设计了所有不同的plugins后,通过实际提供PositionService
实现,在项目的Desktop / Java Package中创建DesktopPositionService
类在包com.gluonhq.charm.down.plugins.desktop
下。
package com.gluonhq.charm.down.plugins.desktop;
import com.gluonhq.charm.down.plugins.Position;
import com.gluonhq.charm.down.plugins.PositionService;
import java.util.Random;
import javafx.animation.PauseTransition;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.util.Duration;
public class DesktopPositionService implements PositionService {
private final ReadOnlyObjectWrapper<Position> positionProperty = new ReadOnlyObjectWrapper<>();
public DesktopPositionService() {
mockPosition();
}
@Override
public ReadOnlyObjectProperty<Position> positionProperty() {
return positionProperty.getReadOnlyProperty();
}
@Override
public Position getPosition() {
return positionProperty.get();
}
private void mockPosition() {
PauseTransition pause = new PauseTransition(Duration.seconds(5));
pause.setOnFinished(t -> {
positionProperty.set(new Position(new Random().nextFloat() * 100, new Random().nextFloat() * 100));
pause.playFromStart();
});
pause.play();
}
}
所以现在这适用于移动(真实传感器)和桌面(模拟):
Services.get(PositionService.class)
.ifPresent(s ->
s.positionProperty().addListener((obs, ov, nv) ->
System.out.println(String.format("Lat: %.6f, Lon: %.6f", nv.getLatitude(), nv.getLongitude()))));