기타/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말고도 다른기기들도 지원한다는데..
암튼 편리하게 바뀐건 너무 좋은 것 같다.
반응형