How to show current location on a Google Map on Android using Kotlin?

Kotlin Apps/ApplicationsMobile DevelopmentAndroid

This example demonstrates how to show current location on a Google Map on Android using Kotlin.

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project.

Step 2 − Add the following code to res/layout/activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/myMap"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity" />

Step 3 − Add the given dependency in the build.gradle (Module: app)

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'

Step 4 − Add the following code to src/MainActivity.kt

import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.FragmentActivity
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
class MainActivity : FragmentActivity(), OnMapReadyCallback {
   private lateinit var currentLocation: Location
   private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
   private val permissionCode = 101
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      fusedLocationProviderClient =       LocationServices.getFusedLocationProviderClient(this@MainActivity)
      fetchLocation()
   }
   private fun fetchLocation() {
      if (ActivityCompat.checkSelfPermission(
         this, Manifest.permission.ACCESS_FINE_LOCATION) !=
         PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
         this, Manifest.permission.ACCESS_COARSE_LOCATION) !=
         PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
            arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), permissionCode)
            return
         }
         val task = fusedLocationProviderClient.lastLocation
         task.addOnSuccessListener { location ->
         if (location != null) {
            currentLocation = location
            Toast.makeText(applicationContext, currentLocation.latitude.toString() + "" +
         currentLocation.longitude, Toast.LENGTH_SHORT).show()
            val supportMapFragment = (supportFragmentManager.findFragmentById(R.id.myMap) as
            SupportMapFragment?)!!
            supportMapFragment.getMapAsync(this@MainActivity)
         }
      }
   }
   override fun onMapReady(googleMap: GoogleMap?) {
      val latLng = LatLng(currentLocation.latitude, currentLocation.longitude)
      val markerOptions = MarkerOptions().position(latLng).title("I am here!")
      googleMap?.animateCamera(CameraUpdateFactory.newLatLng(latLng))
      googleMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5f))
      googleMap?.addMarker(markerOptions)
   }
   override fun onRequestPermissionsResult(requestCode: Int, permissions:    Array<String?>,
   grantResults: IntArray) {
      when (requestCode) {
         permissionCode -> if (grantResults.isNotEmpty() && grantResults[0] ==
         PackageManager.PERMISSION_GRANTED) {
            fetchLocation()
         }
      }
   }
}

Step 5 − To get the google API key (map_key), kindly follow the steps below Visit the Google Cloud Platform Console.

  • Click the project drop-down and select or create the project for which you want to add an API key.
  • Click the menu button and select APIs & Services > Credentials.
  • On the Credentials page, click Create credentials > API key. The API key created dialog displays your newly created API key.
  • Click Close.
  • The new API key is listed on the Credentials page under API keys. (Remember to restrict the API key before using it in production.)
  • Add the API key in the manifest file <meta-data></meta-data> as shown in the step 6

Step 6 − Add the following code to androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.q15">
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      <meta-data
         android:name="com.google.android.geo.API_KEY"
         android:value="AIzaSyCiSh4VnnI1jemtZTytDoj2X7Wl6evey30" />
   </application>
</manifest>

Let's try to run your application. I assume you have connected your actual Android Mobile device with your computer. To run the app from android studio, open one of your project's activity files and click the Run icon Play Icon from the toolbar. Select your mobile device as an option and then check your mobile device which will display your default screen


raja
Published on 09-Jul-2020 11:28:41
Advertisements