카카오맵 안드로이드 SDK를 사용하는 프로젝트를 하던 중, 갑자기 내위치 찾기 코드에서 앱이 크래시 나는 현상을 발견 했습니다. (target SDK가 31이었고, 테스트 폰은 SDK 30 이었습니다.)
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List android.location.LocationManager.getAllProviders()' on a null object reference
mapView.currentLocationTrackingMode = MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading
'currentLocationTrackingMode'를 바꾸려할때. 즉, 내위치찾기 모드를 바꾸려할 때 에러가 납니다.
카카오맵 코드를 살펴 보면, mapview를 init 할 때 MapViewLocationManager도 init을 합니다.
MapViewLocationManager을 init 할 때, addGpsStatusListener 메소드를 호출 합니다.
addGpsStatusListener는 말 그대로 gps 상태를 트래킹하는 리스너를 다는 메서드입니다.
그런데 이 메서드는 sdk S(12) 이상에서부터는 더이상 지원되지 않습니다.
그렇기 때문에 currentLocationTrackingMode에서 excption 에러가 일어나고 해당 로그가 찍히게 됩니다.
E/MapViewLocationManager: init failed
결론적으로 locationManager가 null이기 때문에, NullPointerException 에러가 나게 됩니다.
카카오맵 측에서 이 부분 이슈를 해결해 주지 않는 이상 .. android 12 이상에서는 위치트래킹 하는 기능을 사용 할 수 없을 것 같습니다.
(일단 저의 능력으로는 모르겠습니다..)
targetSDK 를 31 에서 30 으로 낮추고,
앱이 꺼지지 않게 하기 위해서 위치 트래킹 하는 부분은 try catch로 막기 혹은 sdk 버전 30이하일때만 실행되도록 하면 됩니다.
당근마켓 같은 경우에는 안드로이드 12 이상에서는 내위치 트래킹을 시도하고자 하면 '위치서비스를 켜고 이용하세요' 라는 토스트를 띄우고, 내위치 트래킹 기능은 제공하지 않습니다. (gps와 위치권한은 모두 허용한 상태인데도 말이죠)
다른 앱 들은 대부분 네이버 지도를 사용하고 있었기 때문에, 다른 카카오지도를 사용하는 앱들은 어떻게 대처하고 있는지 잘 모르겠네요.
카카오 맵 개발자들의 빠른 대응 바랍니다 ㅠ.ㅠ
혹시 이미 대응이 되었는데, 제가 잘못 사용하고 있는 거면 댓글 부탁드립니다!