@@ -6,6 +6,8 @@ import android.location.Location
6
6
import android.os.Bundle
7
7
import android.view.View
8
8
import androidx.appcompat.app.AppCompatActivity
9
+ import androidx.lifecycle.DefaultLifecycleObserver
10
+ import androidx.lifecycle.LifecycleOwner
9
11
import androidx.lifecycle.lifecycleScope
10
12
import com.mapbox.api.directions.v5.models.RouteOptions
11
13
import com.mapbox.geojson.Point
@@ -26,8 +28,9 @@ import com.mapbox.navigation.base.route.RouterFailure
26
28
import com.mapbox.navigation.base.route.RouterOrigin
27
29
import com.mapbox.navigation.base.trip.model.RouteProgress
28
30
import com.mapbox.navigation.core.MapboxNavigation
29
- import com.mapbox.navigation.core.MapboxNavigationProvider
30
31
import com.mapbox.navigation.core.directions.session.RoutesObserver
32
+ import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
33
+ import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver
31
34
import com.mapbox.navigation.core.replay.MapboxReplayer
32
35
import com.mapbox.navigation.core.replay.ReplayLocationEngine
33
36
import com.mapbox.navigation.core.replay.route.ReplayProgressObserver
@@ -240,13 +243,38 @@ class ShowAlternativeRoutesActivity : AppCompatActivity() {
240
243
}
241
244
242
245
@SuppressLint(" MissingPermission" )
243
- override fun onCreate (savedInstanceState : Bundle ? ) {
244
- super .onCreate(savedInstanceState)
245
- binding = ActivityShowAlternativeRoutesBinding .inflate(layoutInflater)
246
- setContentView(binding.root)
246
+ val navigationCreatedObserver = object : MapboxNavigationObserver {
247
+ override fun onAttached (mapboxNavigation : MapboxNavigation ) {
248
+ this @ShowAlternativeRoutesActivity.mapboxNavigation = mapboxNavigation
249
+ mapboxNavigation.startTripSession()
250
+ }
251
+
252
+ override fun onDetached (mapboxNavigation : MapboxNavigation ) {
253
+ // mapboxNavigation is invalid
254
+ }
255
+ }
247
256
248
- // initialize Mapbox Navigation
249
- mapboxNavigation = MapboxNavigationProvider .create(
257
+ val navigationResumedObserver = object : MapboxNavigationObserver {
258
+ override fun onAttached (mapboxNavigation : MapboxNavigation ) {
259
+ mapboxNavigation.registerLocationObserver(locationObserver)
260
+ mapboxNavigation.registerRouteProgressObserver(replayProgressObserver)
261
+ mapboxNavigation.registerRoutesObserver(routesObserver)
262
+ mapboxNavigation.registerRouteAlternativesObserver(alternativesObserver)
263
+ binding.mapView.gestures.addOnMapClickListener(mapClickListener)
264
+ }
265
+
266
+ override fun onDetached (mapboxNavigation : MapboxNavigation ) {
267
+ mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver)
268
+ mapboxNavigation.unregisterLocationObserver(locationObserver)
269
+ mapboxNavigation.unregisterRoutesObserver(routesObserver)
270
+ mapboxNavigation.unregisterRouteAlternativesObserver(alternativesObserver)
271
+ binding.mapView.gestures.removeOnMapClickListener(mapClickListener)
272
+ }
273
+ }
274
+
275
+ init {
276
+ // You can setup MapboxNavigation at any part of the app lifecycle.
277
+ MapboxNavigationApp .setup(
250
278
NavigationOptions .Builder (this )
251
279
.accessToken(getString(R .string.mapbox_access_token))
252
280
.locationEngine(ReplayLocationEngine (mapboxReplayer))
@@ -256,7 +284,31 @@ class ShowAlternativeRoutesActivity : AppCompatActivity() {
256
284
.build()
257
285
)
258
286
.build()
259
- )
287
+ ).attach(this )
288
+
289
+ lifecycle.addObserver(object : DefaultLifecycleObserver {
290
+ override fun onCreate (owner : LifecycleOwner ) {
291
+ MapboxNavigationApp .registerObserver(navigationCreatedObserver)
292
+ }
293
+
294
+ override fun onResume (owner : LifecycleOwner ) {
295
+ MapboxNavigationApp .registerObserver(navigationResumedObserver)
296
+ }
297
+
298
+ override fun onPause (owner : LifecycleOwner ) {
299
+ MapboxNavigationApp .unregisterObserver(navigationResumedObserver)
300
+ }
301
+
302
+ override fun onDestroy (owner : LifecycleOwner ) {
303
+ MapboxNavigationApp .unregisterObserver(navigationCreatedObserver)
304
+ }
305
+ })
306
+ }
307
+
308
+ override fun onCreate (savedInstanceState : Bundle ? ) {
309
+ super .onCreate(savedInstanceState)
310
+ binding = ActivityShowAlternativeRoutesBinding .inflate(layoutInflater)
311
+ setContentView(binding.root)
260
312
261
313
binding.mapView.getMapboxMap().loadStyleUri(
262
314
NavigationStyles .NAVIGATION_DAY_STYLE
@@ -270,33 +322,14 @@ class ShowAlternativeRoutesActivity : AppCompatActivity() {
270
322
findRoute(originPoint, destinationPoint)
271
323
}
272
324
273
- binding.mapView.gestures.addOnMapClickListener(mapClickListener)
274
325
replayOriginLocation()
275
- mapboxNavigation.startTripSession()
276
- }
277
-
278
- override fun onStart () {
279
- super .onStart()
280
- mapboxNavigation.registerLocationObserver(locationObserver)
281
- mapboxNavigation.registerRouteProgressObserver(replayProgressObserver)
282
- mapboxNavigation.registerRoutesObserver(routesObserver)
283
- mapboxNavigation.registerRouteAlternativesObserver(alternativesObserver)
284
- }
285
-
286
- override fun onStop () {
287
- super .onStop()
288
- mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver)
289
- mapboxNavigation.unregisterLocationObserver(locationObserver)
290
- mapboxNavigation.unregisterRoutesObserver(routesObserver)
291
- mapboxNavigation.unregisterRouteAlternativesObserver(alternativesObserver)
292
326
}
293
327
294
328
override fun onDestroy () {
295
329
super .onDestroy()
296
330
routeLineApi.cancel()
297
331
routeLineView.cancel()
298
332
mapboxReplayer.finish()
299
- mapboxNavigation.onDestroy()
300
333
}
301
334
302
335
/* *
0 commit comments