Blog Archives
GoogleMaps Demo
Here is a simple example of Android Maps v2 using MapFragment. We are assuming that the Google Play services SDK is installed. If you don’t have the SDK, please install before this. See details at here.
New Project
- File > New > Android Application Project
- Application Name: MapsDemo
- Package Name: edu.kettering.mapsdemo
- Minimum Required SDK: API 11: Android 3.0
- Note: Fragment was introduced in API 11
- Compile With: Google APIs (Google Inc.) (API 17)
- If you have not installed Google APIs, Install it using the Android SKD Manager. Google APIs are the superset of Android APIs. This means “Google API level 17” means “Android 4.2.2 (level 17) + Google APIs.”
- Use default values for all the options.
Adding Library
Add Google Play services library.
- Project > Properties.
- Select Android in the left. Find the Library pane. Click “Add…” and select “google-play-services_lib”
Adding MapFragment
- Open “activity_main.xml” and delete the text view.
- Drag the “Fragment” in the “Layout” Palette and drop on the main layout.
- “Choose Fragment Class” will be prompted.
- Find “MapFragment.”
- Align the fragment by adjusting the size. The root layout is RelativeLayout. So drag the border lines and drop at the end of the window left, top, right, and bottom.
- Change the id to “@+id/map”
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout>
Using GoogleMap class
We can get a GoogleMap object using FragmentManager. A MapFragment can be acquired from findFragmentById. The map can get from getMap().
package edu.kettering.mapsdemo; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import android.app.Activity; import android.os.Bundle; import android.view.Menu; public class MainActivity extends Activity { static final LatLng ketteringLatLng = new LatLng(43.013651,-83.713498); private GoogleMap map; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); map = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); map.addMarker(new MarkerOptions().position(ketteringLatLng).title("Kettering")); map.moveCamera(CameraUpdateFactory.newLatLngZoom(ketteringLatLng, 15)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
Getting an API Key
Get an API Key with the package name, “edu.kettering.mapsdemo” and the SHA-1 fingerprint. See this article for more detail.
Editing AndroidManifest.xml
We need to add permission, uses-permission, use-feature, and meta-data. “edu.kettering.mapsdemo”s in red should be replaced with your app’s package name.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.kettering.mapsdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <!-- Start Maps --> <permission android:name="edu.kettering.mapsdemo.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="edu.kettering.mapsdemo.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET"/> <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-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <!-- End of Maps --> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- Start Maps --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_OWN_KEY"/> <!-- End of Maps --> <activity android:name="edu.kettering.mapsdemo.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> </application> </manifest>