fixed position: use AlarmManager for reliable wakeups

obj_origin
Georg Lukas 2011-11-11 15:19:39 +01:00
rodzic b0296394ae
commit b379871394
1 zmienionych plików z 35 dodań i 4 usunięć

Wyświetl plik

@ -1,31 +1,61 @@
package org.aprsdroid.app
import _root_.android.app.AlarmManager
import _root_.android.app.PendingIntent
import _root_.android.content.BroadcastReceiver
import _root_.android.content.Context
import _root_.android.content.Intent
import _root_.android.content.IntentFilter
import _root_.android.location.Location
import _root_.android.os.{Bundle, Handler}
import _root_.android.util.Log
class FixedPosition(service : AprsService, prefs : PrefsWrapper) extends LocationSource {
val TAG = "APRSdroid.FixedPosition"
val periodicPoster = new Runnable() { override def run() { postPosition(); postRefresh(); } }
val ALARM_ACTION = "org.aprsdroid.app.FixedPosition.ALARM"
val intent = new Intent(ALARM_ACTION)
val pendingIntent = PendingIntent.getBroadcast(service, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT)
// get called on alarm
val receiver = new BroadcastReceiver() {
override def onReceive(ctx : Context, i : Intent) {
Log.d(TAG, "onReceive: " + i)
postPosition()
postRefresh()
}
}
val manager = service.getSystemService(Context.ALARM_SERVICE).asInstanceOf[AlarmManager]
var alreadyRunning = false
override def start(singleShot : Boolean) = {
stop()
if (alreadyRunning)
stop()
alreadyRunning = true
service.registerReceiver(receiver, new IntentFilter(ALARM_ACTION))
postPosition()
if (!singleShot)
postRefresh()
service.getString(R.string.p_source_manual)
}
override def stop() {
service.handler.removeCallbacks(periodicPoster)
manager.cancel(pendingIntent)
service.unregisterReceiver(receiver)
}
def postRefresh() {
// get update interval
val upd_int = prefs.getStringInt("interval", 10)
service.handler.postDelayed(periodicPoster, upd_int*60*1000)
Log.d(TAG, "postRefresh(): " + upd_int + " min")
manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + upd_int*60*1000,
pendingIntent)
}
def postPosition() {
@ -34,4 +64,5 @@ class FixedPosition(service : AprsService, prefs : PrefsWrapper) extends Locatio
location.setLongitude(prefs.getStringFloat("manual_lon", 0))
service.postLocation(location)
}
}