반응형
(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 |