Commit 2142265b authored by wanglei's avatar wanglei

...

parent ba3f81d7
...@@ -7,6 +7,7 @@ import android.os.Build ...@@ -7,6 +7,7 @@ import android.os.Build
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.locationsharewhite.R import com.base.locationsharewhite.R
import com.base.locationsharewhite.databinding.ActivityMainBinding import com.base.locationsharewhite.databinding.ActivityMainBinding
import com.base.locationsharewhite.fcm.PopupConstObject import com.base.locationsharewhite.fcm.PopupConstObject
...@@ -17,7 +18,6 @@ import com.base.locationsharewhite.helper.BaseActivity ...@@ -17,7 +18,6 @@ import com.base.locationsharewhite.helper.BaseActivity
import com.base.locationsharewhite.helper.MyApplication import com.base.locationsharewhite.helper.MyApplication
import com.base.locationsharewhite.location.LocationLoginUtils import com.base.locationsharewhite.location.LocationLoginUtils
import com.base.locationsharewhite.map.MapUtils.addLocationMarker import com.base.locationsharewhite.map.MapUtils.addLocationMarker
import com.base.locationsharewhite.map.MapUtils.getLatLngByLocationManager
import com.base.locationsharewhite.ui.howuse.HowUseActivity import com.base.locationsharewhite.ui.howuse.HowUseActivity
import com.base.locationsharewhite.ui.locationmap.LocationMapActivity import com.base.locationsharewhite.ui.locationmap.LocationMapActivity
import com.base.locationsharewhite.ui.set.SettingActivity import com.base.locationsharewhite.ui.set.SettingActivity
...@@ -143,29 +143,52 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { ...@@ -143,29 +143,52 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
if (isRecreate) { if (isRecreate) {
return return
} }
mainPresenter.requestLocationUpdates()
mainPresenter.startLocationJob(lifecycleScope)
LogEx.logDebug(TAG, "onResume isRecreate=$isRecreate") LogEx.logDebug(TAG, "onResume isRecreate=$isRecreate")
} }
override fun onPause() {
super.onPause()
mainPresenter.cancelLocationUpdates()
mainPresenter.cancelLocationJob()
}
var reSetZoom = true
override fun onMapReady(googleMap: GoogleMap) { override fun onMapReady(googleMap: GoogleMap) {
map = googleMap map = googleMap
val latLng: LatLng? = getLatLngByLocationManager() LogEx.logDebug(TAG, "onMapReady")
if (latLng == null) { mainPresenter.startLocationJob(lifecycleScope)
mainPresenter.getGoogleServiceLocation() mainPresenter.uiLocationCallback = {
mainPresenter.locationCallBack = { LogEx.logDebug(TAG, "uiLocationCallback $it")
if (marker == null) { changeLocation(it, true, reSetZoom)
changeLocation(it) reSetZoom = false
}
}
} else {
changeLocation(latLng)
} }
} }
private fun changeLocation(latLng: LatLng) { private fun changeLocation(latLng: LatLng, cameraFollow: Boolean, reSetZoom: Boolean) {
LogEx.logDebug(TAG, "getLastKnowLocation ${latLng.latitude} ${latLng.longitude}") LogEx.logDebug(TAG, "getLastKnowLocation ${latLng.latitude} ${latLng.longitude}")
val myAvatar = LayoutInflater.from(this).inflate(R.layout.avatar_me, null) initMyMarker(latLng)
map?.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f))
marker = map?.addLocationMarker(myAvatar, latLng, "my") if (cameraFollow) {
if (reSetZoom) {
map?.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f))
} else {
map?.moveCamera(CameraUpdateFactory.newLatLng(latLng))
}
}
}
/**
* 初始化marker
*/
private fun initMyMarker(latLng: LatLng) {
if (marker == null) {
val myAvatar = LayoutInflater.from(this).inflate(R.layout.avatar_me, null)
marker = map?.addLocationMarker(myAvatar, latLng, "my")
}
} }
} }
\ No newline at end of file
...@@ -3,9 +3,21 @@ package com.base.locationsharewhite.ui.main ...@@ -3,9 +3,21 @@ package com.base.locationsharewhite.ui.main
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.location.Location import android.location.Location
import android.os.Looper
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.locationsharewhite.map.MapUtils.getLatLngByLocationManager
import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices import com.google.android.gms.location.LocationServices
import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.LatLng
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
class MainPresenter( class MainPresenter(
val activity: Activity val activity: Activity
...@@ -13,18 +25,96 @@ class MainPresenter( ...@@ -13,18 +25,96 @@ class MainPresenter(
//google的地理位置服务 //google的地理位置服务
private var fusedLocationClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(activity) private var fusedLocationClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(activity)
var googleLocation: LatLng? = null private var googleLocation: LatLng? = null
var locationCallBack: ((latLng: LatLng) -> Unit)? = null
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
fun getGoogleServiceLocation() { private fun getGoogleServiceLocation() {
fusedLocationClient.lastLocation fusedLocationClient.lastLocation
.addOnSuccessListener { location: Location? -> .addOnSuccessListener { location: Location? ->
if (location != null) { if (location != null) {
val latLng = LatLng(location.latitude, location.longitude) val latLng = LatLng(location.latitude, location.longitude)
googleLocation = latLng googleLocation = latLng
locationCallBack?.invoke(latLng)
} }
} }
} }
/**
* 获取自身位置,
*/
private fun getMyLocation(): LatLng? {
var latLng = activity.getLatLngByLocationManager()
if (latLng == null) {
latLng = googleLocation
}
return latLng
}
var locationCallback: LocationCallback? = null
/**
* 请求google service地理位置跟新
*/
@SuppressLint("MissingPermission")
fun requestLocationUpdates() {
// 创建LocationRequest对象,并设置参数
val locationRequest: LocationRequest = LocationRequest.create()
locationRequest.setInterval(10000) // 设置更新间隔为10秒
locationRequest.setFastestInterval(5000) // 设置最快更新间隔为5秒
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) // 设置位置请求的优先级
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
for (location in locationResult.locations) {
// 在这里获取最新的经纬度
val latitude = location.latitude
val longitude = location.longitude
}
}
}
locationCallback?.let {
// 请求位置更新
fusedLocationClient.requestLocationUpdates(locationRequest, it, Looper.getMainLooper())
}
}
/**
* 取消google service地理位置更新
*/
fun cancelLocationUpdates() {
locationCallback?.let {
fusedLocationClient.removeLocationUpdates(it)
}
}
var uiLocationCallback: ((latLng: LatLng) -> Unit)? = null
private var locationJob: Job? = null
fun startLocationJob(lifecycleCoroutineScope: LifecycleCoroutineScope) {
if (locationJob == null) {
locationJob = lifecycleCoroutineScope.launch(Dispatchers.IO) {
while (isActive) {
getGoogleServiceLocation()
val latLng = getMyLocation()
launch(Dispatchers.Main) {
latLng?.let { uiLocationCallback?.invoke(it) }
}
delay(10 * 1000L)
}
}
}
}
fun cancelLocationJob() {
locationJob?.cancel()
locationJob = null
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment