Google Navigation SDK (Android, V6.3.1)-Руководящая стрелка замораживает после повторного подключения GPS или после 10-2Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Google Navigation SDK (Android, V6.3.1)-Руководящая стрелка замораживает после повторного подключения GPS или после 10-2

Сообщение Anonymous »

Проблема
Я интегрирую Google Navigation SDK для Android в приложение Flutter через мост Kotlin. Навигация начинается хорошо, но если сигнал GPS потерян, а затем восстанавливается или через 10-20 минут на навигации, синяя стрелка перестает вращаться с заголовком устройства. Руководство по -прежнему работает (обновления местоположения, обновления ETA, прогресс маршрута, события прибытия пожар), но стрелка на карте заморожена. < /P>
Среда:

Код: Выделить всё

Kotlin = 2.1.0 < /code>

compileSdk = 36 < /code>

targetSdk = 36 < /code>

minSdk = 29< /code>
navigation sdk: com.google.android.libraries.navigation: Навигация: 6.3.0.
Ore Library Dexugaring.
Устройства Проверки: Xiaomi Redmi Note 8 Pro (Android 11), Samsung S21 Fe (Android 14) < /P>
 Minimal Code Пример < /P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P. P> P> P. P> P> P. P> PRE S21 FE (Android 14).  />[b] navigatorHandler.kt[/b]
class NavigatorHandler( private val service: NavigationService, channelId: Int, private val shouldUseNavigation: Boolean ) : NavigationApi.NavigatorListener, MethodCallHandler {
private var navigator: Navigator? = null

private val _navigatorHandlerFlow = MutableSharedFlow(replay = 0)
val navigatorHandlerFlow = _navigatorHandlerFlow.asSharedFlow()

fun initialize() {
NavigationApi.clearForegroundServiceManager()
NavigationApi.initForegroundServiceManagerMessageAndIntent(...)
NavigationApi.getNavigator(AirgApplication.instance, this)
}

override fun onNavigatorReady(navigator: Navigator?) {
this.navigator = navigator
registerService()
registerNavigationListeners()
scope.launch { _navigatorHandlerFlow.emit(NavigationHandlerEvent.NavigatorReady) }
navigator?.setTaskRemovedBehavior(Navigator.TaskRemovedBehavior.QUIT_SERVICE)
}

private fun startNavigation() {
navigator?.let {
it.startGuidance()
scope.launch { _navigatorHandlerFlow.emit(NavigationHandlerEvent.NavigatorStarted) }
}
}

private fun handleRouteResult(
code: Navigator.RouteStatus,
result: MethodChannel.Result
) {
when (code) {
Navigator.RouteStatus.OK -> {
scope.launch {
_navigatorHandlerFlow.emit(NavigationHandlerEvent.SetDestination)
}
result.success(null)
}

else -> result.error(
java.lang.String.valueOf(code),
"Error starting navigation",
null
)
}
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
if (call.method == "navigator#setDestination") {
...
navigator?.let {
val route = it.setDestinations(waypoints, routingOptions, displayOptions)
route.setOnResultListener { code -> handleRouteResult(code, result) }
}
return
}

if (call.method == "navigator#startNavigation") {
startNavigation()
result.success(null)
return
}
< /code>
....
}
} `< /p>
sstrong>navigationviewcontroller.kt
interface InitializedMapScope { val map: GoogleMap }

class NavigationViewController( val id: Int, private val service: NavigationService, private var shouldUseNavigation: Boolean = true ) : NavigationMapOptionsSink, PlatformView {

private val fragmentManager: FragmentManager?
get() = NavigationPlugin.currentActivity?.supportFragmentManager

private val navFragment: SupportNavigationFragment?
get() = fragmentManager?.findFragmentById(R.id.navigation_fragment) as SupportNavigationFragment?

init {
Log.d(TAG, "Start creating controller $id $shouldUseNavigation")
NavigationPlugin.currentActivity?.let {
val inflater = LayoutInflater.from(it)
view = inflater.inflate(R.layout.activity_navigation_view, null)
}
setupNavigationAndObservers()
}

@SuppressLint("ClickableViewAccessibility")
private fun setupNavFragment() {
navFragment?.let {
it.setCalloutInfoDisplayModeOverride(NavigationCalloutDisplayMode.SHOW_NONE)
it.setTrafficPromptsEnabled(false)
it.setHeaderEnabled(false)
it.setRecenterButtonEnabled(false)
it.setEtaCardEnabled(false)
it.setReportIncidentButtonEnabled(false)
it.isNavigationUiEnabled = service.navigator.value?.isGuidenceStarted == true
}
}

private fun setupNavigatorBinding() {
val job = service.navigator
.mapNotNull { it }
.distinctUntilChanged()
.onEach { navigator ->
val sub = navigator.navigatorHandlerFlow.onEach { event ->
when (event) {
is NavigationHandlerEvent.FollowUser -> followUserLocation()
is NavigationHandlerEvent.NavigatorEnded -> dispose()
is NavigationHandlerEvent.NavigatorStopped -> navFragment?.isNavigationUiEnabled = false
is NavigationHandlerEvent.NavigatorReady -> service.signalReady(id)
is NavigationHandlerEvent.NavigatorStarted ->  {
navFragment?.isNavigationUiEnabled = true
scope.launch {
delay(1000)
followUserLocation()
}
}
else -> Unit
}
}.launchIn(scope)
jobs.add(sub)

navigator.initialize()
mapHandler = navigator.createMapHandler("mapHandler")
mapHandler?.initialize(AirgApplication.instance)
initializeMap()
}
.launchIn(scope)
jobs.add(job)
}

private fun setupNavigationAndObservers() {
setupNavFragment()
setupNavigatorBinding()

NavigationMapOptionsSinksCluster.add("navigation", this)
}

override fun getView(): View? = view

@SuppressLint("MissingPermission")
private fun initializeMap() {
withMapAsync {
mapHandler?.onMapReady(map)
try { map.isMyLocationEnabled = true } catch (_: SecurityException) {}
map.setOnCameraMoveStartedListener { event ->
if (event == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) {
shouldFollowUser = false
}
}
pendingPadding?.let { applyPadding(it.top, it.left, it.bottom, it.right) }
}
}

@SuppressLint("MissingPermission")
private fun followUserLocation() {
shouldFollowUser = true
withMapAsync {
map.followMyLocation(GoogleMap.CameraPerspective.TILTED)
}
}
Я попытался установить ismylocationenabled = false , чтобы удалить синюю стрелку по умолчанию и создать пользовательский, но пользовательский интерфейс не изменился. У вас есть идеи, которые могут мне помочь? Это ошибка SDK навигации Google?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -gps-recon
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»