Improve tracker location update
This commit is contained in:
parent
cb556beb2b
commit
1867b3d07d
2 changed files with 15 additions and 7 deletions
|
@ -4,7 +4,7 @@ import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.hardware.*
|
import android.hardware.*
|
||||||
import android.location.Location
|
import android.location.Location
|
||||||
import android.os.Looper
|
import android.os.HandlerThread
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.google.android.gms.location.*
|
import com.google.android.gms.location.*
|
||||||
import net.osmand.PlatformUtil
|
import net.osmand.PlatformUtil
|
||||||
|
@ -43,11 +43,12 @@ class TelegramLocationProvider(private val app: TelegramApplication) : SensorEve
|
||||||
var lastKnownLocation: net.osmand.Location? = null
|
var lastKnownLocation: net.osmand.Location? = null
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
private val locationUpdateHandlerThread = HandlerThread("LocationProviderUpdateHandlerThread")
|
||||||
private var fusedLocationProviderClient: FusedLocationProviderClient? = null
|
private var fusedLocationProviderClient: FusedLocationProviderClient? = null
|
||||||
private val locationRequest = LocationRequest().apply {
|
private val locationRequest = LocationRequest().apply {
|
||||||
interval = 1000
|
interval = 1000
|
||||||
fastestInterval = 500
|
//fastestInterval = 500
|
||||||
maxWaitTime = 2000
|
maxWaitTime = 0
|
||||||
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
||||||
}
|
}
|
||||||
private val locationCallback = object : LocationCallback() {
|
private val locationCallback = object : LocationCallback() {
|
||||||
|
@ -81,6 +82,10 @@ class TelegramLocationProvider(private val app: TelegramApplication) : SensorEve
|
||||||
fun updateCompassValue(value: Float)
|
fun updateCompassValue(value: Float)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
locationUpdateHandlerThread.start()
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
fun resumeAllUpdates() {
|
fun resumeAllUpdates() {
|
||||||
if (AndroidUtils.isLocationPermissionAvailable(app) && fusedLocationProviderClient == null) {
|
if (AndroidUtils.isLocationPermissionAvailable(app) && fusedLocationProviderClient == null) {
|
||||||
|
@ -89,7 +94,7 @@ class TelegramLocationProvider(private val app: TelegramApplication) : SensorEve
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fusedLocationProviderClient?.requestLocationUpdates(
|
fusedLocationProviderClient?.requestLocationUpdates(
|
||||||
locationRequest, locationCallback, Looper.myLooper())
|
locationRequest, locationCallback, locationUpdateHandlerThread.looper)
|
||||||
} catch (unlikely: SecurityException) {
|
} catch (unlikely: SecurityException) {
|
||||||
Log.d(PlatformUtil.TAG, "Lost location permissions. Couldn't request updates. $unlikely")
|
Log.d(PlatformUtil.TAG, "Lost location permissions. Couldn't request updates. $unlikely")
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
||||||
private var updateWidgetHandler: Handler? = null
|
private var updateWidgetHandler: Handler? = null
|
||||||
private var updateWidgetThread = HandlerThread("WidgetUpdateServiceThread")
|
private var updateWidgetThread = HandlerThread("WidgetUpdateServiceThread")
|
||||||
|
|
||||||
|
private var locationUpdateHandlerThread = HandlerThread("LocationUpdateServiceThread")
|
||||||
// FusedLocationProviderClient - Main class for receiving location updates.
|
// FusedLocationProviderClient - Main class for receiving location updates.
|
||||||
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
|
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
|
||||||
|
|
||||||
|
@ -62,6 +63,7 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
||||||
mHandlerThread.start()
|
mHandlerThread.start()
|
||||||
tracksHandlerThread.start()
|
tracksHandlerThread.start()
|
||||||
updateWidgetThread.start()
|
updateWidgetThread.start()
|
||||||
|
locationUpdateHandlerThread.start()
|
||||||
updateShareInfoHandler = Handler(mHandlerThread.looper)
|
updateShareInfoHandler = Handler(mHandlerThread.looper)
|
||||||
updateTracksHandler = Handler(tracksHandlerThread.looper)
|
updateTracksHandler = Handler(tracksHandlerThread.looper)
|
||||||
updateWidgetHandler = Handler(updateWidgetThread.looper)
|
updateWidgetHandler = Handler(updateWidgetThread.looper)
|
||||||
|
@ -82,11 +84,11 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
||||||
|
|
||||||
// Sets the fastest rate for active location updates. This interval is exact, and your
|
// Sets the fastest rate for active location updates. This interval is exact, and your
|
||||||
// application will never receive updates more frequently than this value.
|
// application will never receive updates more frequently than this value.
|
||||||
fastestInterval = 500
|
//fastestInterval = 500
|
||||||
|
|
||||||
// Sets the maximum time when batched location updates are delivered. Updates may be
|
// Sets the maximum time when batched location updates are delivered. Updates may be
|
||||||
// delivered sooner than this interval.
|
// delivered sooner than this interval.
|
||||||
maxWaitTime = 2000
|
maxWaitTime = 0
|
||||||
|
|
||||||
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
||||||
}
|
}
|
||||||
|
@ -166,6 +168,7 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
||||||
tracksHandlerThread.quit()
|
tracksHandlerThread.quit()
|
||||||
mHandlerThread.quit()
|
mHandlerThread.quit()
|
||||||
updateWidgetThread.quit()
|
updateWidgetThread.quit()
|
||||||
|
locationUpdateHandlerThread.quit()
|
||||||
app().showLocationHelper.addOrUpdateStatusWidget(-1, false)
|
app().showLocationHelper.addOrUpdateStatusWidget(-1, false)
|
||||||
|
|
||||||
usedBy = 0
|
usedBy = 0
|
||||||
|
@ -198,7 +201,7 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
||||||
// request location updates
|
// request location updates
|
||||||
try {
|
try {
|
||||||
fusedLocationProviderClient.requestLocationUpdates(
|
fusedLocationProviderClient.requestLocationUpdates(
|
||||||
locationRequest, locationCallback, Looper.myLooper())
|
locationRequest, locationCallback, locationUpdateHandlerThread.looper)
|
||||||
} catch (unlikely: SecurityException) {
|
} catch (unlikely: SecurityException) {
|
||||||
Toast.makeText(this, R.string.no_location_permission, Toast.LENGTH_LONG).show()
|
Toast.makeText(this, R.string.no_location_permission, Toast.LENGTH_LONG).show()
|
||||||
Log.d(PlatformUtil.TAG, "Lost location permissions. Couldn't request updates. $unlikely")
|
Log.d(PlatformUtil.TAG, "Lost location permissions. Couldn't request updates. $unlikely")
|
||||||
|
|
Loading…
Reference in a new issue