Android wroking with Google Maps V2

Nếu bạn đã phát triển bất kỳ ứng dụng nào có chứa Google Maps V1 thì bây giờ là thời điểm nâng cấp nó tới Google Maps V2. Bởi vì Google Maps V1 chính thức bị deprecate ngày 03 tháng 12 năm 2012 và giờ nó không còn làm việc nữa. Mục tiêu của bài viết này sẽ cung cấp cho bạn những kiến thức cơ bản về Google Maps V2. Trước khi bắt đầu project mới, thì bạn  cần đi qua những bước bắt buộc liên quan tới việc tạo SHA1 và cấu hình maps trong giao diện của google.

1. Downloading Google Play Services Maps  V2 API như là một phần của Google Play Services SDK. Trước khi bắt đầu phát triển Maps cần phải download google play services từ SDK Manager. **Mở Eclipse ⇒ Windows ⇒ Android SDK Manager **và kiểm tra liệu bạn thực sự đã download Google Play Services:

downloading-google-play-services-sdk 2.Importing Google Play Services Into Eclipse Sau khi download Google Play Services chúng ta cần import nó tới Eclipse, sử dụng nó như một thư viện cho ứng dụng của chúng ta.

  • Trong Eclipse  tới File =>; Import =>; Android = >; Existing Android Code Into Workspace
  • Click trên Browse và lựa chọn Google Play Services Project từ trong folder android SDK của bạn :
android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib
  • Quan trọng là check vào Copy projects into workspace như hình  bên dưới : importing-google-play-services

3.1  Như trong Maps V1 chúng ta cần tạo ra SHA-1 sử dụng keytool trong java. Mở terminal và thực thi những lệnh bên dưới để tạo ra SHA-1. Trên Window:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore"-alias androiddebugkey -storepass android -keypass android

Trên Linux và Mac OS:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

android-google-maps-sha-1-fingerprint

3.2  Bây giờ mở Google API Console

3.3  Lựa chọn Services bên trái và bật Google Maps Android API V2 android-google-console-maps-api 3.4  Lựa chọn API Access bên trái và click Create new Android Keygoogle-console-creating-a-key

3.5 Nó sẽ hiển thị một popup yêu cầu SHA1Android project package name. Nhập SHA1android project package name tách biệt bằng dấu ; sau đó click on create

google-console-generating-maps-key

Tôi đã nhập như sau : _BE:03:E1:44:39:7B:E8:17:02:9F:7F:B7:98:82:EA:DF:84:D0:FB:6A;com.framgia.googlemapsv2

Bây giờ có API key : google-console-android-maps-api-key1

4. Creating new Project Sau khi hoàn thành việc cấu hình, bây giờ là thời điểm bắt đầu pproject riêng của bạn

4.1 Trong Eclipse tạo project**: File =>; New =>; Android Application Project** và điền chi tiết theo hướng dẫn. Lưu ý package name phải giống như cái bạn đã nhập trong bước 3.5 ở trên.

4.2 Bây giờ chúng ta sử dụng Google Play Services Project như là một library. click chuột phải trên project =>; chọn Properties =>; Android =>; Add Button =>; Click và chọn Google play serviesservies linking-google-play-services-to-project linking-google-play-services-to-project-1 linking-google-play-services-to-project-2

4.3 Add Map Key vào trong file mainifest. Mở AndroidManifest.xml  và thêm những đoạn code bên dưới. Thay thế android:value với map key của riêng bạn

<!-- Goolge Maps API Key -->;
 <meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyBZMlkOv4sj-M5JO9p6wksdax4TEjDVLgo" />;

4.4 Google maps cần những quyền và những tính năng sau:

- ACCESS_NETWORK_STATE ->Kiểm tra trạng thái mạng liệu dữ liệu có thể đã download hay chưa

- INTERNET ->Kiểm tra trạng thái kết nối

- WRITE_EXTERNAL_STORAGE ->lưu trữ dữ liệu trên SDCard (google maps lưu trữ dữ liệu map trên SDCard)

- ACCESS_COARSE_LOCATION ->chỉ ra vị trí người dùng thông qua WIFI and dữ liệu điện thoại

- ACCESS_FINE_LOCATION ->chỉ ra vị trí người dùng sẻ dụng GPS

OpenGL ES V2 - yêu cầu cho Google Maps V2 Cuối cùng file AndroidManifest.xlm của tôi sẽ trông như này :

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.techie.googlemapv2″
android:versionCode=”1″
android:versionName=”1.0″ >
<permission
android:name=”info.androidhive.googlemapsv2.permission.MAPS_RECEIVE”
android:protectionLevel=”signature” />
<uses-permission android:name=”info.androidhive.googlemapsv2.permission.MAPS_RECEIVE” />
<uses-sdk
android:minSdkVersion=”12″
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_WIFI_STATE” />
<!– Required to show current location –>
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION” />
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” />
<!– Required OpenGL ES 2.0. for Maps V2 –>
<uses-feature
android:glEsVersion=”0×00020000″
android:required=”true” />
<!– Requires OpenGL ES version 2 –>
<uses-feature
android:glEsVersion=”0×00020000″
android:required=”true” />
<application
android:allowBackup=”true”
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name” >
<activity
android:name=”com.techie.googlemapv2.MainActivity”
android:label=”@string/app_name”
android:theme=”@style/AppBaseTheme” >
<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.gms.version”
android:value=”@integer/google_play_services_version” />
<!– Goolge API Key –>
<meta-data
android:name=”com.google.android.maps.v2.API_KEY”
android:value=”AIzaSyA3KrzNVmoTPl2qO1uZ1BFCjN0wkXqTn50″ />
</application>
</manifest>

5.5 Google maps mới sử dụng MapFragments , là lớp con của lớp Fragment. Mở file layout activity_main.xml và add đoạn code bên đưới

<?xml version=”1.0″ encoding=”utf-8″?>
<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>

5.6 Add đoạn code bên dưới vào trong file MainActivity.java

public class MainActivity extends Activity {
// Google Map
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
// Loading map
initilizeMap();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* function to load map. If map is not created it will create it for you
* */
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
“Sorry! unable to create maps”, Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
protected void onResume() {
super.onResume();
initilizeMap();
}
}

Chạy project và bạn sẽ nhìn thấy map đang hiển thị trên thiết bị

android-google-maps Ngòai ra bạn có thể đặt một marker trên map bằng cách sử dụng đoạn code dưới: google-maps-v2-placing-a-marker

Mặc định map marker là màu đỏ, nhưng google đã cung cấp cho bạn một vài icon với các màu sắc khác nhau để bạn lựa chọn:

// ROSE color icon
marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
// GREEN color icon
marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));

android-google-maps-changing-marker-icon-color1

Ngoài ra bạn có thể thay đổi Icon của Marker theo những hình ảnh bạn muốn như bên dưới:

// latitude and longitude
double latitude = 17.385044;
double longitude = 78.486671;
// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps");
// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));
// adding marker
googleMap.addMarker(marker);

Di Chuyển Camera tới vị trí mong muốn:

CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(17.385044 ;78.486671)).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

Thay đổi kiểu map Google cung cấp 4 loại kiểu map là Normal,Hybrid,Satellitevà**Terrain **.Bạn có thể chuyển đổi qua lại bất kỳ kiểu map nào bằng phương thức googleMap.setMapType()

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);

androd-google-maps-changing-map-type

Hiển thị vị trí hiện tại Bạn có thể hiển thị vị trí hiện tại với phương thức setMyLocationEnabled()

googleMap.setMyLocationEnabled(true); // false to disable

Zooming Buttons Bạn có thể gọi:

googleMap.getUiSettings().setZoomControlsEnabled(false); // true to enable

Zooming Funtionality Bạn có thể disable cử những cử chỉ zoom bằng

googleMap.getUiSettings().setZoomGesturesEnabled(false);

Hiển thị compass

googleMap.getUiSettings().setCompassEnabled(true);

Hiển thị My Location Button my location button được sử dụng để di chuyển và hiển thị vị trí hiện tại của bạn

googleMap.getUiSettings().setMyLocationButtonEnabled(true);

Cử chỉ xoay bản đồ (Map Rotate Gesture) Có thể được enable or disable với setRotateGesturesEnabled()

googleMap.getUiSettings().setRotateGesturesEnabled(true);

Nếu bạn muốn lấy và hiển thị kinh độ(longitude) và vĩ độ(latitude) vị trí hiện của thiết thị , bạn có thể tham khảo tại đây.

full source code: http://www.mediafire.com/download/bmda1ld0vmzp2et/GoogleMapsV2.zip

Các trang tài liệu tham khảo :

https://developers.google.com/maps/documentation/android/start?hl=vi

http://www.androidhive.info/

http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html