12/08/2018, 13:55

Bắt đầu vời Google Maps API cho Android

1 - Giới thiệu Bản đồ là một trong những thứ vô cùng cần thiết cho con người. Bản đồ đã có lịch sử phát triển từ rất lâu với nhiều sự tiến bộ về quy cũng như độ chính xác. Ngày nay Google đã xây dựng một bộ dữ liệu khổng lồ về bản đồ điện tử và cung cấp các API để các lập trình viên có thể sử ...

1 - Giới thiệu

Bản đồ là một trong những thứ vô cùng cần thiết cho con người. Bản đồ đã có lịch sử phát triển từ rất lâu với nhiều sự tiến bộ về quy cũng như độ chính xác. Ngày nay Google đã xây dựng một bộ dữ liệu khổng lồ về bản đồ điện tử và cung cấp các API để các lập trình viên có thể sử dụng và tùy biến cho nhiều mục đích khác nhau. Trong bài viết này mình xin giới thiệu tới các bạn căn bản để bắt đầu lập trình Google Maps trên Android.

2 - Chuẩn bị

Để có thể lập trình Google Maps trên Android bạn cần làm một số việc sau

  • Kiến thức cơ bản về Java và Android
  • Android Studio tải về và hướng dẫn cài đặt
  • Thiết bị để test, có thể là một chiếc smartphone chạy android hoặc một máy ảo Genymotion được tích hợp Google play services theo hướng dẫn
  • Tạo một project với Android Studio theo các bước
  • Nhận key cho project để có thể truy cập Google Maps API từ Google Developer Console

3 - Cách lấy Google Maps API key

  • Sau khi đăng nhập Google Developer Console bằng tài khoản Google, bạn chọn Create Project

1 create project.png

  • Nhập tên project mà bạn đã tạo với Android Studio ở bước chuẩn bị và nhấn Create

2 new project.png

  • Sau khi tạo xong thì bạn chọn menu Library và chọn mục Google Maps Android API

3 lib api.png

  • Tiếp theo bạn chọn Enable

4 enable api.png

  • Trên menu bên trái, bạn chọn mục Credentials và chọn Create Credentials

5 create credential.png

  • Ở đây bạn chọn API Key

6 key created.png

  • API key đã được tạo, bạn copy lại để dùng cho project ở bước kế tiếp

4 - Cấu trúc project

  • AndroidManifest.xml

Các bạn thêm Google Maps API Key nhận được ở bước trên vào thẻ meta-data

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.quanda.googlemapdemo"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCzly8hhVbmbkxGQAGqW_jrHAVeUf1d7OU"/>

        <activity android:name=".ui.activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>
  • Build.gradle (Modules App)
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.android.gms:play-services-maps:9.6.1'
  • activity_main.xml
<LinearLayout-
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_awidth="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.activity.MainActivity">

    <fragment
        android:id="@+id/fragment_map"
         android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_awidth="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
  • ActivityBase.class
package com.example.quanda.googlemapdemo.ui.activity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.quanda.googlemapdemo.R;

/**
 * Created by quanda on 19/09/2016.
 */
public abstract class ActivityBase extends AppCompatActivity {
    private ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initDialogLoading();
    }

    private void initDialogLoading() {
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setTitle(R.string.loading);
        mProgressDialog.setCanceledOnTouchOutside(false);
    }

    protected void showDialogLoading() {
        if (mProgressDialog != null) {
            mProgressDialog.show();
        }
    }

    protected void dismissDialog() {
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }
    }
}
  • MainActivity.class
package com.example.quanda.googlemapdemo.ui.activity;

import android.os.Bundle;

import com.example.quanda.googlemapdemo.R;
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;

public class MainActivity extends ActivityBase {
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
    }

    private void initViews() {
        showDialogLoading();
        SupportMapFragment supportMapFragment =
            (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id
                .fragment_map);
        supportMapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mGoogleMap = googleMap;
                mGoogleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                    @Override
                    public void onMapLoaded() {
                        dismissDialog();
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                        mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
                    }
                });
                LatLng framgiaVietnam = new LatLng(21.0166458, 105.7841248);
                mGoogleMap
                    .addMarker(
                        new MarkerOptions().position(framgiaVietnam).title("Framgia Vietnam"));
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(framgiaVietnam, 18));
            }
        });
    }
}
  • Và đây là kết quả

framgia vietnam.png

5 - Kết luận

Google Maps API có rất nhiều tiện ích để ta có thể tùy biến với nhiều mục đích sử dụng khác nhau. Trong các bài hướng dẫn tiếp theo mình sẽ trình bày sâu hơn về API này.

0