用于桌面的 Gluon PositionService - 测试目的
Gluon PositionService for Desktop - Testing Purposes
我希望能够从我的笔记本电脑上测试 Gluon PositionService。这可能吗?查看运行时依赖项,iOS 和 Android 包含此 jar 文件。桌面依赖项没有它。
能够从我的笔记本电脑上测试此服务的解决方法是什么。我现在只想能够将位置打印到控制台。这是我的笔记本电脑的限制吗?
鉴于 laptop/desktop 机器不包含 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
实现,在 DesktopPositionService
class =33=]你的项目包在包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()))));
我希望能够从我的笔记本电脑上测试 Gluon PositionService。这可能吗?查看运行时依赖项,iOS 和 Android 包含此 jar 文件。桌面依赖项没有它。
能够从我的笔记本电脑上测试此服务的解决方法是什么。我现在只想能够将位置打印到控制台。这是我的笔记本电脑的限制吗?
鉴于 laptop/desktop 机器不包含 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
实现,在 DesktopPositionService
class =33=]你的项目包在包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()))));