class AlertReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val isEntering = intent.getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, false)
if (isEntering) {
Toast.makeText(context, "목표 지점에 접근중입니다..", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(context, "목표 지점에서 벗어납니다..", Toast.LENGTH_SHORT).show()
}
}}
/* --- 여기서 부터 MainActivity 에서 필요한 부분만 --- */
receiver = AlertReceiver()
val filter = IntentFilter()
filter.addAction("com.example.gpstest001.AlertReceiver")
registerReceiver(receiver, filter)
val intent = Intent("com.example.gpstest001.AlertReceiver")
proximityIntent = PendingIntent.getBroadcast(this, 3001, intent, PendingIntent.FLAG_CANCEL_CURRENT)
/**
* 근접 경보 등록 메소드
* void addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)
*/
locationManager.addProximityAlert(deviceLatitude, deviceLongitude, 100f, -1, proximityIntent)
// GPS 정보를 주기적으로 받아 옵니다.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0F, gpsListener)
제가 생각하는 흐름은 이렇습니다.
우선 BLE 디바이스가 있고 그 위치 좌표를 App 에 저장해둡니다.
그리고 GPS 기능을 이용해서 BLE 디바이스 위치 와 가까워지면 BLE Scan 을 시작하고
자동으로 컨넥팅을 시도하려고 합니다.
현재는 GPS 기능 없이 BLE 연결이 끊어지면 계속해서 장치가 보일때 까지 Scan을 하고있습니다만
GPS 기능을 도입하고 싶어서요.
그래서 알아본것이 LocationManager 의 addProximityAlert 인데 제대로 동작 하지 않네요.
증상은 이렇습니다.
버튼을 클릭하여 위치 정보를 주기적으로 얻도록 합니다. 정상적으로 로그에 찍힙니다.
또 다른 버튼을 클릭하여 브로드캐스트 리시버를 등록하고 addProximityAlert 메서드를 실행합니다.
이때, 한번만 onReceive 에서 로그가 찍히고 정해둔 radius값 보다 충분히 멀어졌음에도 정상적으로
작동하질 않습니다.
내부적으로 어떤식으로 동작하는지 잘 이해를 못해서 그런지 자세히 알려주시면 감사하겠습니다.
그리고 만약 위의 기능을 구현하는데 더 좋은 방안이 있으면 알려주시면 감사하겠습니다.
감사합니다.