안드로이드 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말고도 다른기기들도 지원한다는데..
암튼 편리하게 바뀐건 너무 좋은 것 같다.
반응형
'기타 > Android' 카테고리의 다른 글
구글 마켓 정책 변경(2019) (0) | 2019.05.02 |
---|---|
안드로이드 Doze모드 2 (0) | 2019.04.30 |
안드로이드 9.0 (0) | 2019.04.30 |
플레이 스토어 일시 정지 (0) | 2019.04.30 |
안드로이드 앱 아이콘 변경 (0) | 2019.04.30 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글