Kotlin: как получить широту и долготу для вызова карты Google с намерением? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть такой код

//onCreate()

btnmap.setOnClickListener{
 viewMap()
}

//end of onCreate()

var MyLongitude:Double? = null
var Mylatitude:Double? = null

fun location(){
 var locationListener = object : LocationListener {
        override fun onLocationChanged(locationn: Location?) {

            Mylongitude = locationn!!.longitude //i want to take this value
            Mylatitude = locationn.latitude //i want to take this value

        }
      ....
    }
}

fun viewMap(){
    Log.i(LOG, "$MyLongitude, $Mylatitude") //the output is null, null
    val gmmIntentUri = Uri.parse("google.streetview:cbll=$MyLatitude,$MyLongitude")
    val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
    mapIntent.setPackage("com.google.android.apps.maps");
    startActivity(mapIntent)
}

Я хочу вызвать карту Google с намерением узнать, где сейчас находится мое местоположение, для этого мне нужно значение широты и долготы в местоположении (),если вы видите мой код, когда я вызываю в Log MyLatitude и MyLongitude в viewMap (), вывод всегда будет нулевым, даже если ему было присвоено значение в location () до

, я пытаюсь вызвать viewMap ()внутри onLocationChanged () в location (), и я получаю значение широты и долготы, но это заставляет мое приложение всегда вызывать карту Google автоматически каждый раз, когда местоположение меняется

обычно мое приложение вызывает Google Map, когда я нажимаюкнопка btnmap

Итак, как взять значение широты и долготы из функции location () для намерения в viewMap ()?

1 Ответ

0 голосов
/ 23 февраля 2019

Подробнее о местоположении пользователя можно узнать по здесь .Чтобы получить текущее местоположение, вы должны запросить разрешение пользователя и определить его в файле AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

В вашем методе Activity's onCreate() укажите следующее:

val permissionState = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
if (permissionState != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), REQUEST_PERMISSIONS_REQUEST_CODE)
}

и переопределитеФункция onRequestPermissionsResult выглядит следующим образом:

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    when (requestCode) {
        REQUEST_PERMISSIONS_REQUEST_CODE -> {
            if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                getLocation()
        }
    }
}

Итак, это была основная часть получения местоположения пользователя.Для простоты здесь приведен полный код:

class MainActivity : AppCompatActivity() {

    companion object {
        private const val REQUEST_PERMISSIONS_REQUEST_CODE = 1
    }

    private lateinit var txtView: TextView
    private lateinit var fusedLocationClient: FusedLocationProviderClient

    private var myLongitude: Double? = null
    private var myLatitude: Double? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        txtView = findViewById(R.id.txtView)
        txtView.setOnClickListener {
            viewMap()
        }

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

        val permissionState = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
        if (permissionState != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), REQUEST_PERMISSIONS_REQUEST_CODE)
        }

        if (myLatitude == null || myLatitude == null)
            getLocation()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        when (requestCode) {
            REQUEST_PERMISSIONS_REQUEST_CODE -> {
                if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                    getLocation()
            }
        }
    }

    private fun viewMap() {
        Log.i("LOG", "$myLongitude, $myLatitude")

        val gmmIntentUri = Uri.parse("google.streetview:cbll=$myLatitude,$myLongitude")
        val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)

        mapIntent.setPackage("com.google.android.apps.maps");
        startActivity(mapIntent)
    }

    @SuppressLint("MissingPermission")
    private fun getLocation() {
        fusedLocationClient.lastLocation.addOnSuccessListener { location : Location? ->
            location?.let {
                myLongitude = it.longitude
                myLatitude = it.latitude
            }
        }
    }
}

Для получения более подробной информации о местонахождении пользователя просто перейдите по ссылке выше, существует множество учебных материалов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...