При возобновлении Activity приложение крашится
Есть MapActivity в которой по нажатию кнопки происходит переход к activity CreateOrder из которой пользователь попадает в CreateOrderStep2 а уже из нее возвращается в MapActivity так же по нажатию кнопки, но в процессе перехода происходит краш приложения.
Переход к CreateOrder из MapActivity:
startActivity(Intent(this, CreateOrder::class.java))
Переход к CreateOrderStep2:
startActivity(Intent(this, CreateOrderStep2::class.java))
Переход к MapActivity из CreateOrderStep2:
startActivity(Intent(this, MapActivity::class.java)) // На этом моменте вылетает
Код MapActivity:
import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import com.yandex.mapkit.Animation
import com.yandex.mapkit.MapKitFactory
import com.yandex.mapkit.geometry.Point
import com.yandex.mapkit.map.CameraPosition
import com.yandex.mapkit.mapview.MapView
import android.content.pm.PackageManager
import android.view.View
import android.widget.Button
import android.widget.Toast
import com.yandex.mapkit.MapKit
import com.yandex.mapkit.layers.ObjectEvent
import com.yandex.mapkit.user_location.UserLocationObjectListener
import com.yandex.mapkit.user_location.UserLocationView
class MapActivity : AppCompatActivity(), UserLocationObjectListener {
private lateinit var mapview: MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MapKitFactory.setApiKey("API") //init yandexmap
MapKitFactory.initialize(this)
setContentView(R.layout.activity_map) // init yandexmap
mapview = findViewById(R.id.yandexMap) // init yandexmap
mapview.map.move( // camera settings
CameraPosition(
Point(43.129416, 131.918356),
13.0f, 0.0f, 0.0f
), Animation(Animation.Type.SMOOTH, 8f), null
)
requestLocationPermission() // request allow geo
val mapkit = MapKitFactory.getInstance() // create user location
val userLocation = mapkit.createUserLocationLayer(mapview.mapWindow) // create user location
userLocation.isVisible = true // create user location
}
private fun requestLocationPermission() {
if (ActivityCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) { // Если нет доступа к гео
ActivityCompat.requestPermissions(
this,
arrayOf(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
),
0
)
return
}
}
override fun onStop() {
mapview.onStop()
MapKitFactory.getInstance().onStop()
super.onStop()
}
override fun onStart() {
mapview.onStart()
MapKitFactory.getInstance().onStart()
super.onStart()
}
override fun onObjectAdded(p0: UserLocationView) {
TODO("Not yet implemented")
}
override fun onObjectRemoved(p0: UserLocationView) {
TODO("Not yet implemented")
}
override fun onObjectUpdated(p0: UserLocationView, p1: ObjectEvent) {
TODO("Not yet implemented")
}
fun onClickNewOrder(view: View) {
startActivity(Intent(this, CreateOrder::class.java))
}
}
Ответы (1 шт):
Решил так:
Вынес инициализацию API:
object MapKitInitializer {
private var initialized = false
fun initializeMapKit(context: Context) {
if (!initialized) {
MapKitFactory.setApiKey("API_KEY")
MapKitFactory.initialize(context)
initialized = true
}
}
}
И в OnCreate() просто вызызвал:
MapKitInitializer.initializeMapKit(this) //init yandexmap