Hướng dẫn viết 1 app Android cơ bản với Goong SDK

Trong bài tiếp theo này, các bạn sẽ được hướng dẫn cách dùng Goong SDK để build một ứng dụng dùng map cơ bản cho Android. Đến cuối tutorial, các bạn đã có thể hoàn thành một app với các chức năng map view, tìm kiếm với đề xuất kết quả và ghim pin trên bản đồ.

Full source code available at https://github.com/goong-io/Goong-Android-Example
*Xin lưu ý là chỉ các thiết bị Android phiên bản 4.0 trở lên được hỗ trợ

Phần 1: MapView


Bước 1:
Tạo 1 Project trong Android Studio

Thêm đoạn code sau vào file build.gradlecho Project (không phải cho module):

allprojects {
	repositories {
		...
    maven {
      url  "https://dl.bintray.com/goong-io/GoongMapSDK"
    }
    // or jcenter()
	}
}

Add thêm thư viện vào file:

dependencies {
  implementation('io.goong.goongsdk:goong-android-sdk:2.1.0'){
    transitive=true
  }
}

Bước 2:
Tạo keys (Để sử dụng được SDK và API, các bạn cần keys/token. Hãy truy cập vào account.goong.io để tạo tài khoản, rồi tạo keys tại https://account.goong.io/keys. Xin lưu ý là bài hướng dẫn này cần key cho Map Tiles.)

Bước 3:
Tạo MapView đơn giản

Điền key/token đã được tạo tại {YOUR_GOONG_ACCESS_TOKEN}:

public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();

    // Goong Access token
    Goong.getInstance(getApplicationContext(), 
       {YOUR_GOONG_ACCESS_TOKEN});
  }
}

Đăng ký custom Class Application trong AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <application
   android:name=".MyApplication"
   ...>
   ...
   <service android:name="io.goong.goongsdk.telemetry.TelemetryService" />
 </application>

Thêm fragment vào Activity_maps.xml. Fragment này xác định SupportMapFragment hoạt động như một container cho bản đồ và để cung cấp quyền truy cập vào đối tượng GoongMap.

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/map"
  android:name="io.goong.goongsdk.maps.SupportMapFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.mapwithmarker.MapsMarkerActivity" />

Tại method onCreate()trong map activity, set content view bằng file layout:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Retrieve the content view that renders the map.
    setContentView(R.layout.activity_maps);
    // Get the SupportMapFragment and request notification
    // when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

Implement interface OnMapReadyCallBack, override method onMapReady(). Gắn marker lên Map :

public class MapsMarkerActivity extends AppCompatActivity
        implements OnMapReadyCallback {
    // Include the OnCreate() method here too, as described above.
    @Override
    public void onMapReady(GoongMap goongMap) {
        // Add a marker in Hanoi, Vietnam,
        // and move the map's camera to the same location.
        LatLng hanoi = new LatLng(21.0217827, 105.7942671);
        goongMap.addMarker(new MarkerOptions().position(hanoi)
                .title("Marker in Hanoi"));
        goongMap.moveCamera(CameraUpdateFactory.newLatLng(hanoi));
    }
}

Phần 2: Goong Geocoder

Goong Geocoder là thư viện front-end cho Goong Autocomplete. Sau khi tích hợp nó vào thì người dùng app của bạn có thể dễ dàng tìm kiếm địa điểm trên thanh SearchBox, với những đề xuất kết quả được update liên tục khi gõ từ khóa.

Source code: https://github.com/goong-io/Goong-Geocoder-Android

Để tích hợp Goong Geocoder cho Android:

Thêm dòng này vào file gradle và build lại:

implementation 'io.goong.goongsdk.geocoder:goong-android-geocoder:1.0'

Tạo API Key để gọi (như trên nhưng thay vì chọn Maptile Key, chọn API key)

Có 2 cách để sử dụng Geocoder có sẵn: dùng Activity hoặc Fragment

Start Activity for result:
Intent intent = new PlaceAutocomplete.IntentBuilder()
    .apiKey("Your Api Key")
    .placeOptions(new PlaceOptions.Builder()
                    .limit(20)
                    .location(21.0278, 105.8342) // your lat-long to improve search results
                    .build()
    )
    .build(this);
  startActivityForResult(intent, 100);

Lấy kết quả trả về qua onActivityResult:

@Override
  protected void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == 100 && data != null && resultCode == Activity.RESULT_OK) {
          PlaceDetails details = PlaceAutocomplete.getPlaceDetail(data);
          Log.e("Test", details.toString());
          Toast.makeText(this, details.name + "", Toast.LENGTH_SHORT).show();
      }
  }
Add Fragment
AutocompleteFragment autocompleteFragment = AutocompleteFragment.newInstance("Your API Key",
          new PlaceOptions.Builder().build());
  autocompleteFragment.setOnPlaceSelectedListener(details -> {
        Log.e("Test", details.toString());
        Toast.makeText(this, details.name + "", Toast.LENGTH_SHORT).show();
  });
  // add/replace your fragment into your view
Place Options:
  • Ta có thể điều chỉnh kết quả tìm kiếm bằng `PlaceOptions`
new PlaceOptions.Builder()
      .limit(20) // limit the results returned
      .location(21.0278, 105.8342) // your lat-long location to improve search results. This is recommended
      .radius(2500) // results will be in the radius from the location you provided above
      .build()