ロケーションソース

本SDKは、現在位置情報の取得元(以下、ロケーションソース)を変更することができます。

デフォルトロケーションソース

 
デフォルトのロケーションソースです。
デフォルトのロケーションソースは、位置情報と端末の向きを取得します。
位置情報は、アプリケーションのパーミッションによってGPSまたは、ネットワークから位置情報を取得します。

  • ACCESS_FINE_LOCATION:GPSかネットワーク、または両方から位置情報を取得します。
  • ACCESS_COARSE_LOCATION:ネットワークから位置情報を取得します。

デフォルトロケーションソースを使用して現在位置機能を有効にしたい場合は、上記パーミッションのどちらかを有効にしてください。

カスタムロケーションソース

 
SDK使用者が定義したロケーションソースです。 カスタムロケーションソースに変更するには、LocationSourceインターフェースを実装したクラスオブジェクトを作成し、下記メソッドで登録します。

  • ZDCMap.setLocationSource(LocationSource)

SDKは、登録されたロケーションソースのactivateメソッドを呼び出してイベントリスナーを登録することで位置情報の取得を開始します。
LocationSourceインターフェースを実装したクラスは、LocationSource.activateメソッドが呼ばれてから、LocationSource.deactivateメソッドが呼ばれるまでの間、activateで渡されたイベントリスナーに位置情報を通知するようにして下さい。
SDKが登録されたロケーションソースのdeactivateメソッドを呼び出すことで位置情報の取得を終了します。

以下はカスタムロケーションソースの実装例です。
 
①interface LocationSourceを実装したカスタムロケーションソースクラスを実装する

例:activateされている間、皇居の周りを回る位置情報を1秒おきに通知し続けるカスタムロケーションソースクラス
実装時環境:mobileSDK:1.3.8 Android OS:8.0.0 確認したハードウェア機種:XPERIA 701SO

public class CustomLocation implements LocationSource {

    OnLocationChangedListener m_OnLocationChangedListener = null;;

    // latitude, longitude, bearing, accuracy
    double m_location[][] = {
            {35.685204, 139.763174, 200, 500},
            {35.682237, 139.762179, 200, 500},
            {35.678481, 139.760934, 200, 500},
            {35.675117, 139.759689, 300, 500},
            {35.676712, 139.755827, 300, 500},
            {35.677775, 139.753252, 250, 500},
            {35.677270, 139.749583, 320, 500},
            {35.679867, 139.745828, 330, 500},
            {35.683928, 139.744068, 10, 500},
            {35.688154, 139.745216, 10, 500},
            {35.694262, 139.746418, 60, 500},
            {35.695613, 139.752737, 130, 500},
            {35.693130, 139.756213, 130, 500},
            {35.691239, 139.758927, 150, 500},
            {35.689383, 139.760805, 150, 500},
            {35.685688, 139.761202, 90, 500},
    };
    private int m_locCnt = 0;

    private Timer m_timer = new Timer();
    private TimerTask task = new TimerTask() {
        @Override
        public void run() {
            if(m_locCnt >= m_location.length) m_locCnt = 0;

            Location location = new Location("");
            location.setLatitude(m_location[m_locCnt][0]);
            location.setLongitude(m_location[m_locCnt][1]);
            location.setBearing((float)m_location[m_locCnt][2]);
            location.setAccuracy((float)m_location[m_locCnt][3]);

            m_OnLocationChangedListener.onLocationChanged(location);
            m_locCnt++;
        }
    };


    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) throws IllegalStateException, IllegalArgumentException {
        if(onLocationChangedListener == null) return;

        m_OnLocationChangedListener = onLocationChangedListener;
        m_timer.schedule(task, 0, 1000);
    }

    @Override
    public void deactivate() throws IllegalStateException {
        m_timer.cancel();
    }
}

②アプリケーションで作成したロケーションソースをSDKに設定する

LocationSource source = new CustomLocation();
map.setLocationSource(source);

③端末の現在位置許可設定および、SDKの現在位置機能がONになっている場合、
SDKはCustomLocationが通知する位置情報を現在位置として表示する

④デフォルトのロケーションソースに戻したい場合はnullを設定する

map.setLocationSource(null);