Industrial Training




Google Map Fixed Location


Google Map displays the current location, navigate location direction, search location etc. To place the Google Map in an application, we need to create the Google Map API key and integrate it in our application.
The Google Map tutorial using Java code is implemented at Android Google Map.
In this tutorial, we will integrate the Google Maps in our Android application. To place the Google Map in application, selects the activity type as Google Maps Activity. By default this activity generates the required configuration and setting which are required for Google map.



To implement the Google Map, we need to generate the Google Map API key and integrate it into our application.
Copy the URL from res/values/google_map_api.xml file and paste it at the browser or we can directly visit at Console Google Developer to generates the Google Map API key.




Click on Create API key to generate API key.



After clicking on Create API key, it will generate our API key displaying the following screen.


Paste the generated API key in our res/values/google_map_api.xml file.



activity_maps.xml


Add the following code in activity_maps.xml layout file.


< fragment xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:map="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:id="@+id/map"  
    android:name="com.google.android.gms.maps.SupportMapFragment"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="example.mcatutorials.com.kotlingooglemap.MapsActivity" />  
< fragment xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:map="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:id="@+id/map"  
    android:name="com.google.android.gms.maps.SupportMapFragment"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context="example.mcatutorials.com.kotlingooglemap.MapsActivity" />  

build.gradle


Add the Google Map Service and Google Location Service dependencies in build.gradle file.


dependencies {  
    implementation fileTree(include: ['*.jar'], dir: 'libs')  
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"  
    implementation 'com.android.support:appcompat-v7:26.1.0'  
    implementation 'com.google.android.gms:play-services-maps:11.8.0'  
    implementation 'com.google.android.gms:play-services-location:11.8.0'  
    testImplementation 'junit:junit:4.12'  
}  
dependencies {  
    implementation fileTree(include: ['*.jar'], dir: 'libs')  
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"  
    implementation 'com.android.support:appcompat-v7:26.1.0'  
    implementation 'com.google.android.gms:play-services-maps:11.8.0'  
    implementation 'com.google.android.gms:play-services-location:11.8.0'  
    testImplementation 'junit:junit:4.12'  
}  

strings.xml


< resources>  
    < string name="app_name">Kotlin Google Map< /string>  
    < string name="title_activity_maps">Map Fixed Location< /string>  
< /resources>  
< resources>  
    < string name="app_name">Kotlin Google Map< /string>  
    < string name="title_activity_maps">Map Fixed Location< /string>  
< /resources>  

strings.xml


Place the Google Map API key in res/values/google_map_api.xml file.

< resources>  
    < !--  
     Follow the directions here:  
  
    https://developers.google.com/maps/documentation/android/signup  
  
    Once you have your key (it starts with "AIza"), replace the "google_maps_key"  
    string in this file.  
    -->  
    < string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">AIzaSyCmTF-n-REPLACE-WITH-YOUR-KEY< /string>  
< /resources>  
< resources>  
    < !--  
     Follow the directions here:  
  
    https://developers.google.com/maps/documentation/android/signup  
  
    Once you have your key (it starts with "AIza"), replace the "google_maps_key"  
    string in this file.  
    -->  
    < string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">AIzaSyCmTF-n-REPLACE-WITH-YOUR-KEY< /string>  
< /resources>  

MapsActivity.kt


To get the GoogleMap object in our MapsActivity.kt class, we need to implement the OnMapReadyCallback interface and override the onMapReady() callback method. To display the fix location on map, place the latitude and longitude point in the LatLng(latitude, longitude).
GoogleMap.addMarker() points the location of given location.


package example.javatpoint.com.kotlingooglemap  
  
import android.os.Bundle  
import android.support.v7.app.AppCompatActivity  
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.Marker  
import com.google.android.gms.maps.model.MarkerOptions  
  
class MapsActivity : AppCompatActivity(), OnMapReadyCallback,  GoogleMap.OnMarkerClickListener {  
  
    private lateinit var mMap: GoogleMap  
  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_maps)  
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.  
        val mapFragment = supportFragmentManager  
                .findFragmentById(R.id.map) as SupportMapFragment  
        mapFragment.getMapAsync(this)  
    }  
  
    /**  
     * Manipulates the map once available.  
     * This callback is triggered when the map is ready to be used.  
     * This is where we can add markers or lines, add listeners or move the camera. In this case,  
     * we just add a marker near Sydney, Australia.  
     * If Google Play services is not installed on the device, the user will be prompted to install  
     * it inside the SupportMapFragment. This method will only be triggered once the user has  
     * installed Google Play services and returned to the app.  
     */  
    override fun onMapReady(googleMap: GoogleMap) {  
  
        mMap = googleMap  
        // Add a marker in India and move the camera  
        val myLocation = LatLng(20.5937, 78.9629)  
        mMap.addMarker(MarkerOptions().position(myLocation).title("Marker in India"))  
        mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation))  
        mMap.uiSettings.isZoomControlsEnabled = true  
    }  
    override fun onMarkerClick(p0: Marker?) = false  
  
}  
package example.javatpoint.com.kotlingooglemap  
  
import android.os.Bundle  
import android.support.v7.app.AppCompatActivity  
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.Marker  
import com.google.android.gms.maps.model.MarkerOptions  
  
class MapsActivity : AppCompatActivity(), OnMapReadyCallback,  GoogleMap.OnMarkerClickListener {  
  
    private lateinit var mMap: GoogleMap  
  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_maps)  
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.  
        val mapFragment = supportFragmentManager  
                .findFragmentById(R.id.map) as SupportMapFragment  
        mapFragment.getMapAsync(this)  
    }  
  
    /**  
     * Manipulates the map once available.  
     * This callback is triggered when the map is ready to be used.  
     * This is where we can add markers or lines, add listeners or move the camera. In this case,  
     * we just add a marker near Sydney, Australia.  
     * If Google Play services is not installed on the device, the user will be prompted to install  
     * it inside the SupportMapFragment. This method will only be triggered once the user has  
     * installed Google Play services and returned to the app.  
     */  
    override fun onMapReady(googleMap: GoogleMap) {  
  
        mMap = googleMap  
        // Add a marker in India and move the camera  
        val myLocation = LatLng(20.5937, 78.9629)  
        mMap.addMarker(MarkerOptions().position(myLocation).title("Marker in India"))  
        mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation))  
        mMap.uiSettings.isZoomControlsEnabled = true  
    }  
    override fun onMarkerClick(p0: Marker?) = false  
  
}  

AndroidManifest.xml


Add the in AndroidManifest.xml file.


< ?xml version="1.0" encoding="utf-8"?>  
< manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="example.javatpoint.com.kotlingooglemap">  
     < 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">  
  
        < meta-data  
            android:name="com.google.android.geo.API_KEY"  
            android:value="@string/google_maps_key" />  
  
        < activity  
            android:name=".MapsActivity"  
            android:label="@string/title_activity_maps">  
            < intent-filter>  
                < action android:name="android.intent.action.MAIN" />  
  
                < category android:name="android.intent.category.LAUNCHER" />  
            < /intent-filter>  
        < /activity>  
    < /application>  
  
< /manifest>  
< ?xml version="1.0" encoding="utf-8"?>  
< manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="example.javatpoint.com.kotlingooglemap">  
     < 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">  
  
        < meta-data  
            android:name="com.google.android.geo.API_KEY"  
            android:value="@string/google_maps_key" />  
  
        < activity  
            android:name=".MapsActivity"  
            android:label="@string/title_activity_maps">  
            < intent-filter>  
                < action android:name="android.intent.action.MAIN" />  
  
                < category android:name="android.intent.category.LAUNCHER" />  
            < /intent-filter>  
        < /activity>  
    < /application>  
  
< /manifest>  

Output:

MapsActivity.kt


The application built on version Marshmallow facilitates run time user permission. In this class, we create the above example by providing the run time permission to access the device fine location ACCESS_FINE_LOCATION.


package example.javatpoint.com.kotlingooglemap  
  
import android.Manifest  
import android.content.pm.PackageManager  
import android.os.Build  
import android.os.Bundle  
import android.support.v4.app.ActivityCompat  
import android.support.v4.app.FragmentActivity  
import android.widget.Toast  
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.Marker  
import com.google.android.gms.maps.model.MarkerOptions  
  
class MapsActivity : FragmentActivity(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener  {  
  
    private lateinit var mMap: GoogleMap  
  
    companion object {  
        private val MY_PERMISSION_FINE_LOCATION = 101  
    }  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_maps)  
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.  
        val mapFragment = supportFragmentManager  
                .findFragmentById(R.id.map) as SupportMapFragment  
        mapFragment.getMapAsync(this)  
    }  
  
    override fun onMapReady(googleMap: GoogleMap) {  
        mMap = googleMap  
  
        // Add a marker in India and move the camera  
        val india = LatLng(20.5937, 78.9629)  
        mMap.addMarker(MarkerOptions().position(india).title("Marker in India"))  
        mMap.moveCamera(CameraUpdateFactory.newLatLng(india))  
  
        if (ActivityCompat.checkSelfPermission(this,  
                        Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {  
                 mMap.isMyLocationEnabled = true  
        }  
        else {//condition for Marshmello and above  
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
                requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), MY_PERMISSION_FINE_LOCATION)  
            }  
        }  
        mMap.setOnMarkerClickListener(this)  
    }  
    override fun onMarkerClick(p0: Marker?) = false  
      
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array< String>, grantResults: IntArray) {  
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)  
        when (requestCode) {  
            MY_PERMISSION_FINE_LOCATION -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//permission to access location grant  
                if (ActivityCompat.checkSelfPermission(this,  
                                Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {  
                    mMap.isMyLocationEnabled = true  
                }  
            }  
            //permission to access location denied  
            else {  
                Toast.makeText(applicationContext, "This app requires location permissions to be granted", Toast.LENGTH_LONG).show()  
                finish()  
            }  
        }  
    }  
  
}  
package example.javatpoint.com.kotlingooglemap  
  
import android.Manifest  
import android.content.pm.PackageManager  
import android.os.Build  
import android.os.Bundle  
import android.support.v4.app.ActivityCompat  
import android.support.v4.app.FragmentActivity  
import android.widget.Toast  
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.Marker  
import com.google.android.gms.maps.model.MarkerOptions  
  
class MapsActivity : FragmentActivity(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener  {  
  
    private lateinit var mMap: GoogleMap  
  
    companion object {  
        private val MY_PERMISSION_FINE_LOCATION = 101  
    }  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(R.layout.activity_maps)  
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.  
        val mapFragment = supportFragmentManager  
                .findFragmentById(R.id.map) as SupportMapFragment  
        mapFragment.getMapAsync(this)  
    }  
  
    override fun onMapReady(googleMap: GoogleMap) {  
        mMap = googleMap  
  
        // Add a marker in India and move the camera  
        val india = LatLng(20.5937, 78.9629)  
        mMap.addMarker(MarkerOptions().position(india).title("Marker in India"))  
        mMap.moveCamera(CameraUpdateFactory.newLatLng(india))  
  
        if (ActivityCompat.checkSelfPermission(this,  
                        Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {  
                 mMap.isMyLocationEnabled = true  
        }  
        else {//condition for Marshmello and above  
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
                requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), MY_PERMISSION_FINE_LOCATION)  
            }  
        }  
        mMap.setOnMarkerClickListener(this)  
    }  
    override fun onMarkerClick(p0: Marker?) = false  
      
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array< String>, grantResults: IntArray) {  
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)  
        when (requestCode) {  
            MY_PERMISSION_FINE_LOCATION -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//permission to access location grant  
                if (ActivityCompat.checkSelfPermission(this,  
                                Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {  
                    mMap.isMyLocationEnabled = true  
                }  
            }  
            //permission to access location denied  
            else {  
                Toast.makeText(applicationContext, "This app requires location permissions to be granted", Toast.LENGTH_LONG).show()  
                finish()  
            }  
        }  
    }  
  
}  



Hi I am Pluto.