기타/Android

안드로이드 RTT, WIFI를 활용한 실내 GPS

마샤와 곰 2019. 4. 30. 09:03

 

 

안드로이드 9.0에서부터 RTT를 활용한 실내 GPS 좌표 기능을 제공하고 있다. 비콘처럼 삼각측량을 통한 자기 좌표 결정 방법이 더욱 간단 해 진 것이다. 사용자 입장에서도 따로 블루투스를 켜지 않아도 되며, 그냥 WIFI만 켜도 되니 매우 편리한 기능 인 것 같다.
먼저 권한에 대해서 매니페스트에 권한을 설정한다.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

그리고 사용가능한 기기인지 확인한다.

IntentFilter filter =
    new IntentFilter(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED);
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context ctx, Intent inten) {
        if (wifiRttManager.isAvailable()) {
            … //사용가능하면...블라블라~
        } else {
            …
        }
    }
};
context.registerReceiver(receiver, filter);

그리고나서 wifi기기 범위를 지정하고 콜백함수를 통해서 데이터를 받으면 된다.

WifiRttManager mgr = (WifiRttManager) Context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint(wifi목록1);
builder.addAccessPoint(wifi목록2);
//접근하는 wifi위치...n개 등록 가능
//WifiManager 클래스를 활용하면 만들 수 있다.
//WifiManager wm =  (WifiManager) getSystemService(WIFI_SERVICE);
//List<ScanResult> apList = wm.getScanResults();
//이런느낌으로...

RangingRequest req = builder.build();

mgr.startRanging(request, executor, new RangingRequestCallback() {

  @Override
  public void onRangingFailure(int code) {
    //실패
  }
  @Override
  public void onRangingResults(List<RangingResult> result) {
    //성공
    //result에 데이터가 담긴 여러 메소드가 있다. 거리, 상태 측정 등등..
  }
});

나중에는 9.0말고도 다른기기들도 지원한다는데..

암튼 편리하게 바뀐건 너무 좋은 것 같다.

반응형