2017-03-11 43 views
1

我希望能夠通過筆記本電腦測試Gluon PositionService。這可能嗎?查看運行時依賴關係,iOS和Android包含這個jar文件。桌面依賴沒有它。桌面的Gluon PositionService - 測試目的

什麼是解決方法能夠從我的筆記本電腦測試此服務。我只是想能夠打印出現在的位置到控制檯。這是我的筆記本電腦的限制嗎?

Desktop Discrepancy

回答

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; 
     }); 

兩個,所有不同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()))));