我希望能夠通過筆記本電腦測試Gluon PositionService。這可能嗎?查看運行時依賴關係,iOS和Android包含這個jar文件。桌面依賴沒有它。桌面的Gluon PositionService - 測試目的
什麼是解決方法能夠從我的筆記本電腦測試此服務。我只是想能夠打印出現在的位置到控制檯。這是我的筆記本電腦的限制嗎?
我希望能夠通過筆記本電腦測試Gluon PositionService。這可能嗎?查看運行時依賴關係,iOS和Android包含這個jar文件。桌面依賴沒有它。桌面的Gluon PositionService - 測試目的
什麼是解決方法能夠從我的筆記本電腦測試此服務。我只是想能夠打印出現在的位置到控制檯。這是我的筆記本電腦的限制嗎?
鑑於筆記本電腦/臺式機不包括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;
});
兩個,所有不同plugins的魅力下設計下,通過實際提供PositionService
實現,在包的com.gluonhq.charm.down.plugins.desktop
下創建項目的Desktop/Java包中的DesktopPositionService
類。
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()))));