반응형

(GPS  주기적인 호출에 관하여..)

음 일단 도즈모드에대해서 이해를 했다면 도움이 됨.

나는 아래 권한을 사용자에게 받아내어서 최적화에서 앱을 제외하면 백그라운드에서 정상적으로 실행이 될 줄 알았다.

ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

 

나는 보통 테스트를 할때  일반적으로 휴대폰을 켜고 사용하고  충전을 하고 음....등등

GPS 테스트 할때도 마찬가지로 휴대폰을 가지고 이동하고 확인하고 잘 되나 보고.. 뭐 문제가 없었다. 

그렇게 지나가는듯 했으나 어쩌다가  위치를 30초 마다 호출을 했는데 찍힌 경로를 보니 이상하게 .. 30초 단위로 찍히지 않음.. 

경로에 공백이 있다.. 

알고보니 도즈모드때문에 그런거였고.. 위 권한 하고는 크게 상관이 없더라.. 

위 권한을 승인받으면 시스템에서 살려주는 주지만 언제 요청하는지는 알 수 없다라고 말하는 듯... 

한참을 좀 해맸는데 .. 잘 해결되서 글을 남긴다. 

나 처럼 백그라운드에서 주기적으로 위치를 요청할라고하면 

뭐 필요한 권한은 알아서 구글님에게 승인을 받으시고 .. 

아래 코드를 사용하면 됨

<Service.kt>

lateinit var mgr : AlarmManager
private fun scheduleAlarms(ctxt: Context) {

    val i = Intent(ctxt, AReceiver::class.java)
    val pi = PendingIntent.getBroadcast(ctxt, 0, i, 0)

    val i2 = Intent(ctxt, AReceiver::class.java)
    val pi2 = PendingIntent.getActivity(ctxt, 0, i2, 0)
    val ac = AlarmClockInfo(
        System.currentTimeMillis() + INTERVAL_TIME,
        pi2
    )
    mgr.setAlarmClock(ac, pi)
}

 

<Receiver.kr>

class AReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {

        Defines.log("hello broadcast~")

        //showNotification(context!!)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val ain = Intent(context, MyService3::class.java)
            ain.putExtra("flag", "re")
            context?.startForegroundService(ain)
        } else {
            val ain = Intent(context, MyService3::class.java)
            ain.putExtra("flag", "re")
            context?.startService(ain)
        }

    }
}

이런식으로 리시버에서 다시 서비스를 호출하면 끈김없이 잘 통신 됨. 

 

반응형

'IT 이야기 > 2021_Android 이것저것' 카테고리의 다른 글

안드로이드 Webview HTTP  (0) 2022.03.18
MotionLayout 맛보기..  (0) 2021.12.29
GPS 위치 정확도 승인  (0) 2021.12.07
RecycleView 높이 가변적으로 조절..  (0) 2021.12.01
Web 에서 App 호출.  (0) 2021.11.29

+ Recent posts