마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

LocationManager 의 addProximityAlert 가 제대로 동작하지 않습니다.

0 추천

 

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값 보다 충분히 멀어졌음에도 정상적으로

작동하질 않습니다.

 

내부적으로 어떤식으로 동작하는지 잘 이해를 못해서 그런지 자세히 알려주시면 감사하겠습니다.

그리고 만약 위의 기능을 구현하는데 더 좋은 방안이 있으면 알려주시면 감사하겠습니다.

감사합니다.

맨날오류남 (160 포인트) 님이 2019년 11월 1일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...