1. ก่อนเริ่มต้น
ดูวิธีใช้ Google Maps Platform และ Places SDK สำหรับ Android เพื่อแสดงรายการสถานที่ต่อผู้ใช้เพื่อระบุตำแหน่งปัจจุบัน
ข้อกำหนดเบื้องต้น
- ทักษะพื้นฐานด้าน Java
สิ่งที่คุณต้องดำเนินการ
- เพิ่มแผนที่ลงในแอป Android
- ใช้สิทธิ์เข้าถึงตำแหน่งเพื่อระบุตำแหน่งทางภูมิศาสตร์ของผู้ใช้
- ดึงข้อมูลสถานที่ใกล้ตำแหน่งปัจจุบันของผู้ใช้
- แสดงสถานที่ที่น่าจะเป็นไปได้ต่อผู้ใช้เพื่อระบุตำแหน่งปัจจุบัน
สิ่งที่คุณจะสร้าง
คุณสร้างแอป Android ตั้งแต่ต้น แต่สามารถดาวน์โหลดโค้ดตัวอย่างเพื่อเปรียบเทียบเมื่อทำการแก้ไขข้อบกพร่อง ดาวน์โหลดโค้ดตัวอย่างจาก GitHub หรือหากตั้งค่า Git สำหรับการใช้บรรทัดคำสั่งแล้ว ให้ป้อนข้อมูลต่อไปนี้
git clone https://github.com/googlecodelabs/current-place-picker-android.git
หากพบปัญหา (ข้อบกพร่องของโค้ด ข้อผิดพลาดทางไวยากรณ์ คำที่ไม่ชัดเจน หรือปัญหาอื่นๆ) ขณะทำตาม Codelab นี้ โปรดรายงานปัญหาผ่านลิงก์รายงานข้อผิดพลาดที่มุมซ้ายล่างของ Codelab
2. เริ่มต้นใช้งาน
ก่อนเริ่ม Codelab นี้ คุณต้องตั้งค่าสิ่งต่อไปนี้
Android Studio
ดาวน์โหลด Android Studio จาก https://developer.android.com/studio
หากมี Android Studio อยู่แล้ว โปรดตรวจสอบว่าคุณใช้เวอร์ชันล่าสุดโดยคลิก Android Studio > ตรวจหาข้อมูลอัปเดต...
แล็บนี้เขียนขึ้นโดยใช้ Android Studio 3.4
Android SDK
ใน Android Studio คุณสามารถกำหนดค่า SDK ที่ต้องการได้โดยใช้ SDK Manager แล็บนี้ใช้ Android Q SDK
- จากหน้าจอต้อนรับของ Android Studio ให้คลิกกำหนดค่า > SDK Manager
- เลือกช่องทำเครื่องหมาย SDK ที่ต้องการ แล้วคลิกใช้
หากยังไม่มี SDK ระบบจะเริ่มดาวน์โหลด SDK ไปยังเครื่องของคุณ
บริการ Google Play
นอกจากนี้ คุณยังต้องติดตั้งบริการ Google Play จาก SDK Manager ด้วย
- คลิกแท็บ SDK Tools แล้วเลือกช่องทําเครื่องหมายบริการ Google Play
อัปเดตหากสถานะระบุว่ามีการอัปเดตพร้อมใช้งาน
3. เตรียมโปรแกรมจำลอง
หากต้องการเรียกใช้แอป คุณสามารถเชื่อมต่ออุปกรณ์ของคุณเองหรือใช้โปรแกรมจำลอง Android
หากใช้อุปกรณ์ของคุณเอง ให้ข้ามไปที่วิธีการสำหรับอุปกรณ์จริง: อัปเดตบริการ Google Play ที่ส่วนท้ายของหน้านี้
เพิ่มโปรแกรมจำลอง
- จากหน้าจอต้อนรับของ Android Studio ให้คลิกกำหนดค่า > AVD Manager
ซึ่งจะเปิดกล่องโต้ตอบตัวจัดการอุปกรณ์เสมือน Android
- คลิกสร้างอุปกรณ์เสมือน... เพื่อเปิดรายการอุปกรณ์ที่คุณเลือกได้
- เลือกอุปกรณ์ที่มีไอคอน Play
ในคอลัมน์ Play Store แล้วคลิกถัดไป
คุณจะเห็นชุดอิมเมจระบบที่ติดตั้งได้ หากการกำหนดเป้าหมาย Q Android 9 ขึ้นไป (Google Play) มีคำว่าดาวน์โหลดอยู่ข้างๆ ให้คลิกดาวน์โหลด
- คลิกถัดไปเพื่อตั้งชื่ออุปกรณ์เสมือน แล้วคลิกเสร็จสิ้น
คุณจะกลับไปที่รายการอุปกรณ์เสมือนของคุณ
- คลิกเริ่ม
ข้างอุปกรณ์เครื่องใหม่
หลังจากผ่านไปสักครู่ โปรแกรมจำลองจะเปิดขึ้น
วิธีการสำหรับโปรแกรมจำลอง - อัปเดตบริการ Google Play
- เมื่อโปรแกรมจำลองเปิดขึ้น ให้คลิก ... ในแถบนำทางที่ปรากฏ**
ซึ่งจะเปิดกล่องโต้ตอบการควบคุมเพิ่มเติม
- คลิก Google Play ในเมนู
หากมีการอัปเดตพร้อมใช้งาน ให้คลิกอัปเดต
- ลงชื่อเข้าใช้โปรแกรมจำลองด้วยบัญชี Google
คุณสามารถใช้บัญชีของตัวเองหรือสร้างบัญชีใหม่ได้ฟรีเพื่อแยกการทดสอบออกจากข้อมูลส่วนตัว
จากนั้น Google Play จะเปิดไปยังบริการ Google Play
- คลิกอัปเดตเพื่อรับบริการ Google Play เวอร์ชันล่าสุด
หากระบบขอให้สร้างบัญชีให้เสร็จสมบูรณ์และเพิ่มตัวเลือกการชำระเงิน ให้คลิกข้าม
ตั้งค่าตำแหน่งในโปรแกรมจำลอง
- เมื่อเปิดโปรแกรมจำลองแล้ว ให้พิมพ์ "maps" ในแถบค้นหาบนหน้าจอหลักเพื่อดึงไอคอนแอป Google Maps ขึ้นมา
- คลิกไอคอนเพื่อเปิด
คุณจะเห็นแผนที่เริ่มต้น
- คลิกตำแหน่งของคุณ
ที่ด้านขวาล่างของแผนที่
ระบบจะขอให้คุณให้สิทธิ์โทรศัพท์ในการใช้ตำแหน่ง
- คลิก ... เพื่อเปิดเมนูการควบคุมเพิ่มเติม
- คลิกแท็บสถานที่
- ป้อนละติจูดและลองจิจูด
ป้อนอะไรก็ได้ที่ต้องการ แต่ต้องอยู่ในพื้นที่ที่มีสถานที่มากมาย
(ใช้ละติจูด 20.7818 และลองจิจูด -156.4624 สำหรับเมืองคิเฮบนเกาะเมาวีในฮาวายเพื่อจำลองผลลัพธ์จากโค้ดแล็บนี้)
- คลิกส่ง แล้วแผนที่จะอัปเดตตำแหน่งนี้
คุณพร้อมที่จะเรียกใช้แอปและทดสอบด้วยตำแหน่งแล้ว
วิธีการสำหรับอุปกรณ์จริง - อัปเดตบริการ Google Play
หากใช้อุปกรณ์ Android จริง ให้ทำดังนี้
- ใช้แถบค้นหาในหน้าจอหลักเพื่อค้นหาและเปิดบริการ Google Play
- คลิกรายละเอียดเพิ่มเติม
คลิกอัปเดต หากมี
4. สร้าง App Shell ด้วยกิจกรรม Google Maps
- ในหน้าจอต้อนรับของ Android Studio ให้เลือกเริ่มโปรเจ็กต์ Android Studio ใหม่
- ในแท็บโทรศัพท์และแท็บเล็ต ให้เลือกกิจกรรมใน Google Maps
กล่องโต้ตอบกำหนดค่าโปรเจ็กต์จะเปิดขึ้น คุณตั้งชื่อแอปและสร้างแพ็กเกจตามโดเมนได้ที่นี่
ต่อไปนี้คือการตั้งค่าสำหรับแอปชื่อ Current Place ซึ่งสอดคล้องกับแพ็กเกจ com.google.codelab.currentplace
- เลือก Java เป็นภาษา แล้วเลือกใช้สิ่งประดิษฐ์ androidx*
เก็บค่าเริ่มต้นสำหรับการตั้งค่าที่เหลือ
- คลิกเสร็จสิ้น
5. เพิ่มทรัพยากร Dependency ของบริการของ Google ลงในไฟล์บิลด์ Gradle
หากต้องการเข้าถึงสิทธิ์เข้าถึงตำแหน่งใน Android คุณต้องมี Google Location API และ Activity Recognition API จากบริการ Google Play ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่ม API นี้และ API อื่นๆ ของบริการ Google Play ได้ที่ตั้งค่าบริการ Google Play
โดยปกติแล้ว โปรเจ็กต์ Android Studio จะมีไฟล์ build.gradle
อยู่ 2 ไฟล์ โดยไฟล์หนึ่งจะใช้กับโปรเจ็กต์โดยรวม และอีกไฟล์หนึ่งจะใช้กับแอป หากคุณมีโปรเจ็กต์ Android Studio Explorer ในมุมมอง Android คุณจะเห็นทั้ง 2 ไฟล์ในโฟลเดอร์ Gradle Scripts
คุณต้องแก้ไขไฟล์ build.gradle (Module: app)
เพื่อเพิ่มบริการของ Google
- เพิ่ม 2 บรรทัดลงในส่วน
dependencies
เพื่อเพิ่มบริการของ Google สำหรับตำแหน่งและ Places API ( ตัวอย่างโค้ดในบริบท)
build.gradle (Module: app)
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.google.codelab.currentplace"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.libraries.places:places:1.1.0'
}
6. เปิดใช้ Google Maps Platform APIs และรับคีย์ API
สำหรับขั้นตอนการเปิดใช้ต่อไปนี้ คุณต้องเปิดใช้ Maps SDK สำหรับ Android และ Places API
ตั้งค่า Google Maps Platform
หากยังไม่มีบัญชี Google Cloud Platform และโปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงิน โปรดดูคู่มือเริ่มต้นใช้งาน Google Maps Platform เพื่อสร้างบัญชีสำหรับการเรียกเก็บเงินและโปรเจ็กต์
- ใน Cloud Console ให้คลิกเมนูแบบเลื่อนลงของโปรเจ็กต์ แล้วเลือกโปรเจ็กต์ที่ต้องการใช้สำหรับ Codelab นี้
- เปิดใช้ Google Maps Platform APIs และ SDK ที่จำเป็นสำหรับ Codelab นี้ใน Google Cloud Marketplace โดยทำตามขั้นตอนในวิดีโอนี้หรือเอกสารประกอบนี้
- สร้างคีย์ API ในหน้าข้อมูลเข้าสู่ระบบของ Cloud Console คุณสามารถทำตามขั้นตอนในวิดีโอนี้หรือเอกสารประกอบนี้ คำขอทั้งหมดไปยัง Google Maps Platform ต้องใช้คีย์ API
คัดลอกคีย์ API ที่คุณเพิ่งสร้าง กลับไปที่ Android Studio แล้วค้นหาไฟล์ google_maps_api.xml
ใน Android > app > res > values
แทนที่ YOUR_KEY_HERE
ด้วยคีย์ API ที่คุณคัดลอก
ตอนนี้แอปของคุณได้รับการกำหนดค่าแล้ว
7. แก้ไขไฟล์เลย์เอาต์
- ในโปรเจ็กต์ Explorer ให้เปิดไฟล์
activity_maps.xml
ใน Android >app
>res
>layout
- คุณจะเห็น UI พื้นฐานเปิดขึ้นทางด้านขวาของหน้าจอ โดยมีแท็บที่ด้านล่างซึ่งให้คุณเลือกเครื่องมือแก้ไขการออกแบบหรือข้อความสำหรับเลย์เอาต์ เลือกข้อความ แล้วแทนที่เนื้อหาทั้งหมดของไฟล์เลย์เอาต์ด้วยข้อความต่อไปนี้
activity_maps.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleTextColor="@android:color/white"
android:background="@color/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="349dp"
tools:context=".MapsActivity" />
<ListView
android:id="@+id/listPlaces"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
ซึ่งจะทำให้คุณมีอินเทอร์เฟซผู้ใช้ที่มีลักษณะดังนี้
8. ตั้งค่าแถบแอป
หากต้องการให้ผู้ใช้มีปุ่มคลิกเมื่อต้องการเลือกสถานที่ปัจจุบัน ให้เพิ่มแถบแอปที่มีไอคอนซึ่งค้นหาสถานที่ปัจจุบันของผู้ใช้และแสดงสถานที่ที่น่าจะเป็นไปได้ในบริเวณใกล้เคียง ซึ่งมีลักษณะดังนี้
ในโทรศัพท์ จะแสดงเฉพาะไอคอน ในแท็บเล็ตที่มีพื้นที่มากขึ้น ระบบจะแสดงข้อความด้วย
สร้างไอคอน
- ในโปรเจ็กต์ Explorer ให้คลิก Android > app จากนั้นคลิกขวาที่โฟลเดอร์ res แล้วเลือกใหม่ > ชิ้นงานรูปภาพ
สตูดิโอชิ้นงานจะเปิดขึ้น
- ในเมนูประเภทไอคอน ให้คลิกไอคอนแถบการทำงานและแท็บ
- ตั้งชื่อชิ้นงาน
ic_geolocate
- เลือกภาพคลิปอาร์ตเป็นประเภทชิ้นงาน**
- คลิกกราฟิกข้างภาพคลิปอาร์ต
ซึ่งจะเปิดหน้าต่างเลือกไอคอน
- เลือกไอคอน
คุณใช้แถบค้นหาเพื่อค้นหาไอคอนที่เกี่ยวข้องกับความตั้งใจได้
- ค้นหา
location
แล้วเลือกไอคอนที่เกี่ยวข้องกับตำแหน่ง
ไอคอนตำแหน่งของฉันเหมือนกับไอคอนที่ใช้ในแอป Google Maps เมื่อผู้ใช้ต้องการเล็งกล้องไปยังตำแหน่งปัจจุบัน
- คลิก OK > Next > Finish แล้วตรวจสอบว่ามีโฟลเดอร์ใหม่ชื่อ
drawable
ซึ่งมีไฟล์ไอคอนใหม่
เพิ่มทรัพยากรสตริง
- ใน Project Explorer ให้คลิก Android > app > res > values แล้วเปิดไฟล์
strings.xml
- เพิ่มบรรทัดต่อไปนี้หลัง
<string name="title_activity_maps">Map</string>
strings.xml
<string name="action_geolocate">Pick Place</string>
<string name="default_info_title">Default Location</string>
<string name="default_info_snippet">No places found, because location permission is disabled.</string>
ระบบจะใช้บรรทัดแรกในแถบแอปเมื่อมีพื้นที่สำหรับใส่ป้ายกำกับข้อความข้างไอคอน ส่วนที่เหลือจะใช้สำหรับเครื่องหมายที่คุณเพิ่มลงในแผนที่
ตอนนี้โค้ดในไฟล์จะมีลักษณะดังนี้
<resources>
<string name="app_name">Current Place</string>
<string name="title_activity_maps">Map</string>
<string name="action_geolocate">Pick Place</string>
<string name="default_info_title">Default Location</string>
<string name="default_info_snippet">No places found, because location permission is disabled.</string>
</resources>
เพิ่มแถบแอป
- ในโปรเจ็กต์ Explorer ให้คลิก Android > app จากนั้นคลิกขวาที่โฟลเดอร์
res
แล้วเลือกใหม่ > ไดเรกทอรีเพื่อสร้างไดเรกทอรีย่อยใหม่ภายใต้app/src/main/res
- ตั้งชื่อไดเรกทอรี
menu
- คลิกขวาที่โฟลเดอร์
menu
แล้วเลือกใหม่ > ไฟล์ - ตั้งชื่อไฟล์
menu.xml
- วางโค้ดนี้
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- "Locate me", should appear as action button if possible -->
<item
android:id="@+id/action_geolocate"
android:icon="@drawable/ic_geolocate"
android:title="@string/action_geolocate"
app:showAsAction="always|withText" />
</menu>
อัปเดตสไตล์แถบแอป
- ใน Project Explorer ให้ขยาย Android >
app
>res
>values
แล้วเปิดไฟล์styles.xml
ด้านใน - ในแท็ก
<style>
ให้แก้ไขพร็อพเพอร์ตี้ระดับบนเป็น"Theme.AppCompat.NoActionBar"
- จดพร็อพเพอร์ตี้
name
ซึ่งคุณจะใช้ในขั้นตอนถัดไป
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
อัปเดตธีมแอปใน AndroidManifest.xml
- คลิก Android >
app
>manifests
แล้วเปิดไฟล์AndroidManifest.xml
- ค้นหาบรรทัด
android:theme
แล้วแก้ไขหรือยืนยันค่าเป็น@style/AppTheme
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
ตอนนี้คุณก็พร้อมที่จะเริ่มเขียนโค้ดแล้ว
9. เริ่มต้นแอป
- ค้นหาไฟล์
MapsActivity.java
ในโปรเจ็กต์เอ็กซ์พลอเรอร์
ซึ่งอยู่ในโฟลเดอร์ที่ตรงกับแพ็กเกจที่คุณสร้างไว้สำหรับแอปในขั้นตอนที่ 1
- เปิดไฟล์ แล้วคุณจะอยู่ในโปรแกรมแก้ไขโค้ด Java
นำเข้า Places SDK และการอ้างอิงอื่นๆ
เพิ่มบรรทัดเหล่านี้ที่ด้านบนของ MapsActivity.java
โดยแทนที่คำสั่งนำเข้าที่มีอยู่
ซึ่งรวมถึงการนำเข้าที่มีอยู่และเพิ่มการนำเข้าอื่นๆ อีกมากมายที่ใช้ในโค้ดในโค้ดแล็บนี้
MapsActivity.java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
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;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.libraries.places.api.Places;
import com.google.android.libraries.places.api.model.Place;
import com.google.android.libraries.places.api.model.PlaceLikelihood;
import com.google.android.libraries.places.api.net.FindCurrentPlaceRequest;
import com.google.android.libraries.places.api.net.FindCurrentPlaceResponse;
import com.google.android.libraries.places.api.net.PlacesClient;
import java.util.Arrays;
import java.util.List;
อัปเดตลายเซ็นของชั้นเรียน
Places API ใช้คอมโพเนนต์ AndroidX เพื่อรองรับการทำงานร่วมกับเวอร์ชันก่อนหน้า ดังนั้นคุณจึงต้องกำหนดเพื่อขยาย AppCompatActivity
โดยจะแทนที่ส่วนขยาย FragmentActivity
ที่กำหนดไว้โดยค่าเริ่มต้นสำหรับกิจกรรมใน Maps
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {
เพิ่มตัวแปรของคลาส
จากนั้นประกาศตัวแปรคลาสต่างๆ ที่ใช้ในเมธอดคลาสต่างๆ ซึ่งรวมถึงองค์ประกอบ UI และรหัสสถานะ โดยควรอยู่ใต้การประกาศตัวแปรสำหรับ GoogleMap mMap
// New variables for Current Place picker
private static final String TAG = "MapsActivity";
ListView lstPlaces;
private PlacesClient mPlacesClient;
private FusedLocationProviderClient mFusedLocationProviderClient;
// The geographical location where the device is currently located. That is, the last-known
// location retrieved by the Fused Location Provider.
private Location mLastKnownLocation;
// A default location (Sydney, Australia) and default zoom to use when location permission is
// not granted.
private final LatLng mDefaultLocation = new LatLng(-33.8523341, 151.2106085);
private static final int DEFAULT_ZOOM = 15;
private static final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
private boolean mLocationPermissionGranted;
// Used for selecting the Current Place.
private static final int M_MAX_ENTRIES = 5;
private String[] mLikelyPlaceNames;
private String[] mLikelyPlaceAddresses;
private String[] mLikelyPlaceAttributions;
private LatLng[] mLikelyPlaceLatLngs;
อัปเดตเมธอด onCreate
คุณจะต้องอัปเดตเมธอด onCreate
เพื่อจัดการสิทธิ์ของผู้ใช้รันไทม์สำหรับบริการตำแหน่ง ตั้งค่าองค์ประกอบ UI และสร้างไคลเอ็นต์ Places API
เพิ่มบรรทัดโค้ดต่อไปนี้เกี่ยวกับแถบเครื่องมือการดำเนินการ การตั้งค่ามุมมอง และไคลเอ็นต์ Places ไปยังส่วนท้ายของเมธอด onCreate()
ที่มีอยู่
MapsActivity.java onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
//
// PASTE THE LINES BELOW THIS COMMENT
//
// Set up the action toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Set up the views
lstPlaces = (ListView) findViewById(R.id.listPlaces);
// Initialize the Places client
String apiKey = getString(R.string.google_maps_key);
Places.initialize(getApplicationContext(), apiKey);
mPlacesClient = Places.createClient(this);
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
}
เพิ่มโค้ดสำหรับเมนูแถบแอป
ทั้ง 2 วิธีนี้จะเพิ่มเมนูแถบแอป (ที่มีรายการเดียวคือไอคอนเลือกสถานที่) และจัดการการคลิกไอคอนของผู้ใช้
คัดลอก 2 วิธีนี้ลงในไฟล์หลังวิธี onCreate
MapsActivity.java onCreateOptionsMenu() และ onOptionsItemSelected()
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_geolocate:
// COMMENTED OUT UNTIL WE DEFINE THE METHOD
// Present the current place picker
// pickCurrentPlace();
return true;
default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);
}
}
ทดสอบ
- จาก Android Studio ให้คลิกเรียกใช้หรือเมนูเรียกใช้ > เรียกใช้ "แอป"
- ระบบจะขอให้คุณเลือกเป้าหมายการติดตั้งใช้งาน โปรแกรมจำลองที่ทำงานอยู่ควรปรากฏในรายการนี้ เลือก แล้ว Android Studio จะติดตั้งใช้งานแอปไปยังโปรแกรมจำลองให้คุณ
หลังจากนั้นไม่นาน แอปจะเปิดขึ้น คุณจะเห็นแผนที่ที่อยู่ตรงกลางซิดนีย์ ประเทศออสเตรเลีย พร้อมปุ่มเดียวและรายการสถานที่ที่ไม่มีข้อมูล
โฟกัสของแผนที่จะไม่ย้ายไปยังตำแหน่งของผู้ใช้ เว้นแต่คุณจะขอสิทธิ์เข้าถึงตำแหน่งของอุปกรณ์
10. ขอและจัดการสิทธิ์เข้าถึงตำแหน่ง
ขอสิทธิ์เข้าถึงตำแหน่งหลังจากที่แผนที่พร้อม
- กำหนดเมธอดชื่อ
getLocationPermission
ที่ขอสิทธิ์จากผู้ใช้
วางโค้ดนี้ใต้ onOptionsSelected
เมธอดที่คุณเพิ่งสร้าง
MapsActivity.java getLocationPermission()
private void getLocationPermission() {
/*
* Request location permission, so that we can get the location of the
* device. The result of the permission request is handled by a callback,
* onRequestPermissionsResult.
*/
mLocationPermissionGranted = false;
if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mLocationPermissionGranted = true;
} else {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}
}
- เพิ่ม 2 บรรทัดที่ส่วนท้ายของ
onMapReady
เมธอดที่มีอยู่เพื่อเปิดใช้ตัวควบคุมการซูมและขอสิทธิ์เข้าถึงตำแหน่งจากผู้ใช้
MapsActivity.java onMapReady()
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
//
// PASTE THE LINES BELOW THIS COMMENT
//
// Enable the zoom controls for the map
mMap.getUiSettings().setZoomControlsEnabled(true);
// Prompt the user for permission.
getLocationPermission();
}
จัดการผลลัพธ์จากสิทธิ์ที่ขอ
เมื่อผู้ใช้ตอบกลับกล่องโต้ตอบคำขอสิทธิ์ Android จะเรียกใช้การเรียกกลับนี้
วางโค้ดนี้หลังเมธอด getLocationPermission()
MapsActivity.java onRequestPermissionsResult()
/**
* Handles the result of the request for location permissions
*/
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults) {
mLocationPermissionGranted = false;
switch (requestCode) {
case PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mLocationPermissionGranted = true;
}
}
}
}
11. รับตำแหน่งปัจจุบันและดึงข้อมูลสถานที่ที่มีแนวโน้ม
เมื่อผู้ใช้คลิกเลือกสถานที่ในแถบแอป แอปจะเรียกใช้เมธอด pickCurrentPlace()
ซึ่งจะเรียกใช้เมธอด getDeviceLocation()
ที่คุณกำหนดไว้ก่อนหน้านี้ เมธอด getDeviceLocation
จะเรียกเมธอดอื่น getCurrentPlaceLikelihoods,
หลังจากดึงข้อมูลตำแหน่งล่าสุดของอุปกรณ์
เรียกใช้ findCurrentPlace API และจัดการการตอบกลับ
getCurrentPlaceLikelihoods
สร้าง findCurrentPlaceRequest
และเรียกใช้ฟังก์ชัน findCurrentPlace
ของ Places API หากงานสำเร็จ ระบบจะแสดง findCurrentPlaceResponse
ซึ่งมีรายการออบเจ็กต์ placeLikelihood
แต่ละรายการมีพร็อพเพอร์ตี้หลายรายการ รวมถึงชื่อและที่อยู่ของสถานที่ และความน่าจะเป็นที่คุณอยู่ในสถานที่นั้น (ค่าแบบ Double จาก 0 ถึง 1) เมธอดนี้จะจัดการการตอบกลับโดยสร้างรายการรายละเอียดสถานที่จาก placeLikelihoods
โค้ดนี้จะวนซ้ำในสถานที่ที่มีแนวโน้มมากที่สุด 5 แห่ง และเพิ่มสถานที่ที่มีแนวโน้มมากกว่า 0 ลงในรายการ จากนั้นจึงแสดงผล หากต้องการแสดงมากกว่าหรือน้อยกว่า 5 รายการ ให้แก้ไขค่าคงที่ M_MAX_ENTRIES
วางโค้ดนี้หลัง onMapReady
method
MapsActivity.java getCurrentPlaceLikelihoods()
private void getCurrentPlaceLikelihoods() {
// Use fields to define the data types to return.
List<Place.Field> placeFields = Arrays.asList(Place.Field.NAME, Place.Field.ADDRESS,
Place.Field.LAT_LNG);
// Get the likely places - that is, the businesses and other points of interest that
// are the best match for the device's current location.
@SuppressWarnings("MissingPermission") final FindCurrentPlaceRequest request =
FindCurrentPlaceRequest.builder(placeFields).build();
Task<FindCurrentPlaceResponse> placeResponse = mPlacesClient.findCurrentPlace(request);
placeResponse.addOnCompleteListener(this,
new OnCompleteListener<FindCurrentPlaceResponse>() {
@Override
public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
if (task.isSuccessful()) {
FindCurrentPlaceResponse response = task.getResult();
// Set the count, handling cases where less than 5 entries are returned.
int count;
if (response.getPlaceLikelihoods().size() < M_MAX_ENTRIES) {
count = response.getPlaceLikelihoods().size();
} else {
count = M_MAX_ENTRIES;
}
int i = 0;
mLikelyPlaceNames = new String[count];
mLikelyPlaceAddresses = new String[count];
mLikelyPlaceAttributions = new String[count];
mLikelyPlaceLatLngs = new LatLng[count];
for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
Place currPlace = placeLikelihood.getPlace();
mLikelyPlaceNames[i] = currPlace.getName();
mLikelyPlaceAddresses[i] = currPlace.getAddress();
mLikelyPlaceAttributions[i] = (currPlace.getAttributions() == null) ?
null : TextUtils.join(" ", currPlace.getAttributions());
mLikelyPlaceLatLngs[i] = currPlace.getLatLng();
String currLatLng = (mLikelyPlaceLatLngs[i] == null) ?
"" : mLikelyPlaceLatLngs[i].toString();
Log.i(TAG, String.format("Place " + currPlace.getName()
+ " has likelihood: " + placeLikelihood.getLikelihood()
+ " at " + currLatLng));
i++;
if (i > (count - 1)) {
break;
}
}
// COMMENTED OUT UNTIL WE DEFINE THE METHOD
// Populate the ListView
// fillPlacesList();
} else {
Exception exception = task.getException();
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
Log.e(TAG, "Place not found: " + apiException.getStatusCode());
}
}
}
});
}
ย้ายกล้องแผนที่ไปยังตำแหน่งปัจจุบันของอุปกรณ์
หากผู้ใช้ให้สิทธิ์ แอปจะดึงตำแหน่งล่าสุดของผู้ใช้และย้ายกล้องไปไว้ตรงกลางตำแหน่งนั้น
หากผู้ใช้ปฏิเสธการให้สิทธิ์ แอปจะย้ายกล้องไปยังตำแหน่งเริ่มต้นที่กำหนดไว้ในค่าคงที่ที่จุดเริ่มต้นของหน้านี้ (ในโค้ดตัวอย่างคือซิดนีย์ ออสเตรเลีย)
วางโค้ดนี้หลังเมธอด getPlaceLikelihoods()
MapsActivity.java getDeviceLocation()
private void getDeviceLocation() {
/*
* Get the best and most recent location of the device, which may be null in rare
* cases when a location is not available.
*/
try {
if (mLocationPermissionGranted) {
Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation();
locationResult.addOnCompleteListener(this, new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
if (task.isSuccessful()) {
// Set the map's camera position to the current location of the device.
mLastKnownLocation = task.getResult();
Log.d(TAG, "Latitude: " + mLastKnownLocation.getLatitude());
Log.d(TAG, "Longitude: " + mLastKnownLocation.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mLastKnownLocation.getLatitude(),
mLastKnownLocation.getLongitude()), DEFAULT_ZOOM));
} else {
Log.d(TAG, "Current location is null. Using defaults.");
Log.e(TAG, "Exception: %s", task.getException());
mMap.moveCamera(CameraUpdateFactory
.newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM));
}
getCurrentPlaceLikelihoods();
}
});
}
} catch (SecurityException e) {
Log.e("Exception: %s", e.getMessage());
}
}
ตรวจสอบสิทธิ์เข้าถึงตำแหน่งเมื่อผู้ใช้คลิกเลือกสถานที่
เมื่อผู้ใช้แตะเลือกสถานที่ เมธอดนี้จะตรวจสอบสิทธิ์เข้าถึงตำแหน่งและแจ้งให้ผู้ใช้ขอสิทธิ์หากยังไม่ได้รับ
หากผู้ใช้ให้สิทธิ์แล้ว เมธอดจะเรียก getDeviceLocation
เพื่อเริ่มกระบวนการรับสถานที่ที่น่าจะใช่ในปัจจุบัน
- เพิ่มวิธีการนี้หลังจาก
getDeviceLocation()
ดังนี้
MapsActivity.java pickCurrentPlace()
private void pickCurrentPlace() {
if (mMap == null) {
return;
}
if (mLocationPermissionGranted) {
getDeviceLocation();
} else {
// The user has not granted permission.
Log.i(TAG, "The user did not grant location permission.");
// Add a default marker, because the user hasn't selected a place.
mMap.addMarker(new MarkerOptions()
.title(getString(R.string.default_info_title))
.position(mDefaultLocation)
.snippet(getString(R.string.default_info_snippet)));
// Prompt the user for permission.
getLocationPermission();
}
}
- เมื่อกำหนด
pickCurrentPlace
แล้ว ให้ค้นหาบรรทัดในonOptionsItemSelected()
ที่เรียกใช้pickCurrentPlace
แล้วยกเลิกการแสดงความคิดเห็น
MapsActivity.java onOptionItemSelected()
case R.id.action_geolocate:
// COMMENTED OUT UNTIL WE DEFINE THE METHOD
// Present the Current Place picker
pickCurrentPlace();
return true;
ทดสอบ
หากคุณเรียกใช้แอปตอนนี้และแตะเลือกสถานที่ แอปควรแจ้งให้ขอสิทธิ์เข้าถึงตำแหน่ง
- หากอนุญาตสิทธิ์ ระบบจะบันทึกค่ากำหนดนั้นและคุณจะไม่ได้รับข้อความแจ้ง หากปฏิเสธสิทธิ์ คุณจะได้รับข้อความแจ้งในครั้งถัดไปที่แตะปุ่ม
- แม้ว่า
getPlaceLikelihoods
จะดึงข้อมูลสถานที่ปัจจุบันที่น่าจะเป็นไปได้แล้ว แต่ListView
ยังไม่แสดงสถานที่เหล่านั้น ใน Android Studio คุณคลิก ⌘6 เพื่อตรวจสอบบันทึกใน Logcat สำหรับคำสั่งที่ติดแท็ก MapsActivity เพื่อยืนยันว่าเมธอดใหม่ทำงานอย่างถูกต้อง - หากคุณให้สิทธิ์ บันทึกจะมีข้อความสำหรับ
Latitude:
และข้อความสำหรับLongitude:
ซึ่งแสดงตำแหน่งที่ตรวจพบของอุปกรณ์ หากคุณใช้ Google Maps และเมนูแบบขยายของโปรแกรมจำลองก่อนหน้านี้เพื่อระบุตำแหน่งสำหรับโปรแกรมจำลอง ข้อความเหล่านี้จะแสดงตำแหน่งดังกล่าว - หากการเรียกใช้
findCurrentPlace
สำเร็จ บันทึกจะมีคำสั่ง 5 รายการที่พิมพ์ชื่อและตำแหน่งของสถานที่ 5 แห่งที่มีแนวโน้มมากที่สุด
12. ป้อนข้อมูลในเครื่องมือเลือกสถานที่ปัจจุบัน
ตั้งค่าตัวแฮนเดิลสำหรับสถานที่ที่เลือก
มาดูกันว่าเราต้องการให้เกิดอะไรขึ้นเมื่อผู้ใช้คลิกรายการใน ListView
หากต้องการยืนยันว่าผู้ใช้เลือกสถานที่ใดเป็นสถานที่ปัจจุบัน คุณสามารถเพิ่มเครื่องหมายลงในแผนที่ที่สถานที่นั้นได้ หากผู้ใช้คลิกเครื่องหมายดังกล่าว หน้าต่างข้อมูลจะปรากฏขึ้นพร้อมชื่อและที่อยู่ของสถานที่
วางตัวแฮนเดิลการคลิกนี้หลังเมธอด pickCurrentPlace
MapsActivity.java listClickedHandler
private AdapterView.OnItemClickListener listClickedHandler = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// position will give us the index of which place was selected in the array
LatLng markerLatLng = mLikelyPlaceLatLngs[position];
String markerSnippet = mLikelyPlaceAddresses[position];
if (mLikelyPlaceAttributions[position] != null) {
markerSnippet = markerSnippet + "\n" + mLikelyPlaceAttributions[position];
}
// Add a marker for the selected place, with an info window
// showing information about that place.
mMap.addMarker(new MarkerOptions()
.title(mLikelyPlaceNames[position])
.position(markerLatLng)
.snippet(markerSnippet));
// Position the map's camera at the location of the marker.
mMap.moveCamera(CameraUpdateFactory.newLatLng(markerLatLng));
}
};
ป้อนข้อมูลใน ListView
เมื่อมีรายการสถานที่ที่ผู้ใช้น่าจะไปในขณะนี้แล้ว คุณก็สามารถแสดงตัวเลือกเหล่านั้นต่อผู้ใช้ใน ListView
ได้ คุณยังตั้งค่าListView
เครื่องมือฟังการคลิกให้ใช้ตัวแฮนเดิลการคลิกที่เพิ่งกำหนดได้ด้วย
วางเมธอดนี้หลังตัวแฮนเดิลการคลิก
MapsActivity.java fillPlacesList()
private void fillPlacesList() {
// Set up an ArrayAdapter to convert likely places into TextViews to populate the ListView
ArrayAdapter<String> placesAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mLikelyPlaceNames);
lstPlaces.setAdapter(placesAdapter);
lstPlaces.setOnItemClickListener(listClickedHandler);
}
ตอนนี้เมื่อกำหนด fillPlacesList
แล้ว ให้ค้นหาบรรทัดที่อยู่ใกล้กับส่วนท้ายของ findPlaceLikelihoods
ที่เรียกใช้ fillPlacesList
แล้วยกเลิกการแสดงความคิดเห็น
MapsActivity.java fillPlaceLikelihoods()
// COMMENTED OUT UNTIL WE DEFINE THE METHOD
// Populate the ListView
fillPlacesList();
เพียงเท่านี้ก็เป็นโค้ดทั้งหมดที่จำเป็นสำหรับเครื่องมือเลือกสถานที่ปัจจุบันแล้ว
13. เรียกใช้แอป
ทดสอบการเลือกสถานที่
- เรียกใช้แอปอีกครั้ง
เมื่อแตะเลือกสถานที่ในครั้งนี้ แอปจะป้อนข้อมูลในรายการด้วยสถานที่ที่มีชื่อซึ่งอยู่ใกล้กับตำแหน่ง ใกล้กับสถานที่นี้ในเมาวีมีร้านค้าอย่าง Ululani's Hawaiian Shave Ice และ Sugar Beach Bake Shop เนื่องจากสถานที่หลายแห่งอยู่ใกล้กับพิกัดตำแหน่งมาก รายการนี้จึงเป็นรายการสถานที่ที่คุณอาจอยู่
- คลิกชื่อสถานที่ใน
ListView
คุณควรเห็นเครื่องหมายที่เพิ่มลงในแผนที่
- แตะเครื่องหมาย
คุณดูรายละเอียดสถานที่ได้
ทดสอบตำแหน่งอื่น
หากต้องการเปลี่ยนตำแหน่งและใช้โปรแกรมจำลอง ตำแหน่งของอุปกรณ์จะไม่ได้รับการอัปเดตโดยอัตโนมัติเมื่อคุณอัปเดตพิกัดตำแหน่งในเมนูแบบขยายของโปรแกรมจำลอง
หากต้องการหลีกเลี่ยงปัญหานี้ ให้ทำตามขั้นตอนต่อไปนี้เพื่อใช้แอป Google Maps ดั้งเดิมเพื่อบังคับให้อัปเดตตำแหน่งของโปรแกรมจำลอง
- เปิด Google Maps
- แตะ ... > ตำแหน่ง เพื่อเปลี่ยนละติจูดและลองจิจูดเป็นพิกัดใหม่ แล้วแตะส่ง
- เช่น คุณสามารถใช้ละติจูด 49.2768 และลองจิจูด -123.1142 เพื่อตั้งค่าสถานที่เป็นดาวน์ทาวน์แวนคูเวอร์ ประเทศแคนาดา
- ตรวจสอบว่า Google Maps ได้จัดกึ่งกลางใหม่ตามพิกัดใหม่แล้ว คุณอาจต้องแตะปุ่มตำแหน่งของฉันในแอป Google Maps เพื่อขอจัดกึ่งกลาง
- กลับไปที่แอป Current Place แล้วแตะเลือกสถานที่เพื่อดูแผนที่ในพิกัดใหม่และดูรายการใหม่ของสถานที่ปัจจุบันที่เป็นไปได้
เพียงเท่านี้ก็เรียบร้อยแล้ว คุณสร้างแอปง่ายๆ ที่ตรวจสอบสถานที่ในตำแหน่งปัจจุบันและบอกความเป็นไปได้ว่าคุณอยู่ที่ใด ขอให้สนุกกับการรับชมค่ะ
ตอนนี้ให้ไปเรียกใช้แอปที่มีการแก้ไขที่คุณทำเพื่อทำตามขั้นตอนโบนัสนี้ให้เสร็จสมบูรณ์
14. ขั้นตอนถัดไป
คุณต้องรักษาคีย์ API ให้ปลอดภัยเพื่อให้มีเพียงแอป Android ของคุณเท่านั้นที่ใช้คีย์ได้ เพื่อป้องกันการขโมยคีย์ API หากไม่จำกัด ใครก็ตามที่มีคีย์ของคุณจะใช้คีย์ดังกล่าวเพื่อเรียก Google Maps Platform API และทำให้คุณถูกเรียกเก็บเงินได้
รับใบรับรอง SHA-1
คุณจะต้องใช้ข้อมูลนี้ในภายหลังเมื่อจำกัดคีย์ API ต่อไปนี้คือชุดวิธีการในการรับใบรับรองการแก้ไขข้อบกพร่อง
สำหรับ Linux หรือ macOS ให้เปิดหน้าต่างเทอร์มินัลแล้วป้อนข้อมูลต่อไปนี้
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
สำหรับ Windows Vista และ Windows 7 ให้เรียกใช้คำสั่งต่อไปนี้
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
คุณควรเห็นเอาต์พุตในลักษณะนี้
Alias name: androiddebugkey Creation date: Jan 01, 2013 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=Android Debug, O=Android, C=US Issuer: CN=Android Debug, O=Android, C=US Serial number: 4aa9b300 Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033 Certificate fingerprints: MD5: AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9 SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75 Signature algorithm name: SHA1withRSA Version: 3
บรรทัดที่ขึ้นต้นด้วย SHA1 จะมีลายนิ้วมือ SHA-1 ของใบรับรอง ลายนิ้วมือคือลำดับของตัวเลขฐานสิบหก 2 หลัก 20 ตัวที่คั่นด้วยเครื่องหมายโคลอน
เมื่อพร้อมที่จะเผยแพร่แอปแล้ว ให้ใช้วิธีการในเอกสารประกอบนี้เพื่อดึงใบรับรองรุ่น
เพิ่มข้อจำกัดให้แก่คีย์ API
- ใน Cloud Console ให้ไปที่ API และบริการ > ข้อมูลเข้าสู่ระบบ
คีย์ที่คุณใช้สำหรับแอปนี้ควรแสดงอยู่ในส่วนคีย์ API
- คลิก
เพื่อแก้ไขการตั้งค่าคีย์
- ในหน้าคีย์ API ให้ตั้งค่าการจำกัดแอปพลิเคชันหลังจากการจำกัดคีย์โดยทำดังนี้
- เลือกแอป Android แล้วทำตามวิธีการ
- คลิกเพิ่มรายการ
- ป้อนชื่อแพ็กเกจและลายนิ้วมือของใบรับรอง SHA-1 (ดึงข้อมูลในส่วนก่อนหน้า)
เช่น
com.google.codelab.currentplace
BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75s
- ตั้งค่าการจำกัด API โดยทำดังนี้เพื่อเพิ่มการป้องกัน
- หลังจากการจำกัด API ให้เลือกจำกัดคีย์
- เลือก Maps SDK สำหรับ Android และ Places API
- คลิกเสร็จสิ้น แล้วคลิกบันทึก
15. ขอแสดงความยินดี
คุณสร้างแอปง่ายๆ ที่ตรวจสอบสถานที่ที่มีแนวโน้มมากที่สุดในตำแหน่งปัจจุบัน และเพิ่มเครื่องหมายลงในแผนที่สำหรับสถานที่ที่ผู้ใช้เลือก
ดูข้อมูลเพิ่มเติม
- ใช้ประโยชน์จากไลบรารียูทิลิตี Maps SDK สำหรับ Android เพื่อเร่งการพัฒนา ยูทิลิตีเหล่านี้จะช่วยจัดการงานที่ซับซ้อนที่สุดบางอย่างสำหรับแอปที่ใช้ Google Maps Platform
- ดูตัวอย่างโค้ดเพิ่มเติมที่แสดงฟีเจอร์ส่วนใหญ่ของ Google Maps Platform SDK สำหรับ Android ได้โดยการโคลนที่เก็บสำหรับตัวอย่าง Maps SDK สำหรับ Android และการสาธิต Places SDK สำหรับ Android
- หากต้องการดูวิธีจัดการสิทธิ์เข้าถึงตำแหน่งแบบ 3 สถานะใน Android Q ให้ทำ Codelab รับข้อมูลอัปเดตตำแหน่งใน Android ด้วย Kotlin ให้เสร็จสมบูรณ์