Wednesday, 24 September 2014

Google Maps v2 in android

So before we start developing maps we need to download google play sevices from SDK manger. You can open SDK manager either from Eclipse or from android sdk folder.
Go to Eclipse --> Windows --> Android SDK Manager and check whether you have already downloaded Google Play Services or not under Extras section. If not select play services and install the package.



Importing Google Play Services into your project
. In Eclipse goto File ⇒ Import ⇒ Android ⇒ Existing Android Code Into Workspace

1. Click on Browse and select Google Play Services project from your android sdk folder. You can locate play services library project from
android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib
2. Importantly while importing check Copy projects into workspace option as shown in the below image.



Getting the Google Maps API key

Same as in maps v1 we need to generate SHA-1 fingerprint using java keytool. Open your cmd and execute the following command to generate SHA-1 fingerprint.

On Windows
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
My debug.keystore is in C:\Users\user\.android\.android\debug.keystore



Copy your SHA Key because you will need it in furthe steps.

Select Projects on left side and then create project.  Give your project name that you have created in you IDE. Dont change anything in project id and click create.

Now click APIs & Auth and select APIs and turn on Google Maps Api v2.
Now select Credentials and click on Create new Key there select Android key and  Enter your SHA 1 and your  Package Name separated by semicolon ; and click on create.
And note down the API key which required later in our project.


Creating new Project

After completing required configuration, It’s time to start our project.
1. In Eclipse create a new project by going to File ⇒ New ⇒ Android Application Project and fill required details. I kept my project name as GoogleMapsv2 and package name as   com.example.googlemapsv2
2. Now we need to use Google Play Services project as a library to use project. So right click on project and select properties. In the properties window on left side select Android. On the right you can see Add button under library section. Click it and select google play services project which we imported previously.
Now Open Your Android Manifest.xml




<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.googlemapsv2"
    android:versionCode="1"
    android:versionName="1.0" >
    <permission
      android:name="com.example.googlemapsv2.permission.MAPS_RECEIVE"
      android:protectionLevel="signature" />
<uses-permission android:name="com.example.googlemapsv2.permission.MAPS_RECEIVE" />

    <uses-sdk
        android:minSdkVersion="11"

        android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
 <application
         android:allowBackup="true"
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name"
     >
        <activity
            android:name="com.example.googlemapsv2.MainActivity" 
            android:label="@string/app_name"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<!-- Google Api Key -->
<meta-data
   android:name="com.google.android.maps.v2.API_KEY"
   android:value="Your Api Key" />
<!-- Dont Forget to mention the below code -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
    </application>


</manifest>

 New google maps are implemented using MapFragments which is a sub class of Fragments class. Open your main activity layout file activity_main.xml file and add following code. I used RelativeLayout as a parent element. You can remove it and use MapFragment directly.

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" >

   <fragment
      android:id="@+id/map"
      android:name="com.google.android.gms.maps.MapFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>


</RelativeLayout>

Add the following code in your Main Activity java MainActivity.java class
MainActivity.java 
package com.example.googlemapsv2
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
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;
import com.google.android.gms.maps.MapFragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

  // Google Map

  private GoogleMap googleMap;


  // GPS Location
  

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_map);
try {
    //Loading map
      initilizeMap();

 } catch (Exception e) {
      e.printStackTrace();
    }
 }
 private void initilizeMap() {
    if (googleMap == null) {
      googleMap = ((MapFragment) getFragmentManager().findFragmentById(
          R.id.map)).getMap();
if (googleMap == null) {

        Toast.makeText(getApplicationContext(),
            "Sorry! unable to create maps", Toast.LENGTH_SHORT)
            .show();
          
      }
    }
  }


  @Override
  protected void onResume() {
    super.onResume();
    initilizeMap();
  }
}
Now Run your project in your device because emulator dosent support maps..

If you feel like any difficulties then post your comment..



No comments: