本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);
④デフォルトのロケーションソースに戻したい場合はnullを設定する
map.setLocationSource(null);