เกี่ยวกับ Codelab นี้
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 ผู้จัดการ ห้องทดลองนี้ใช้ Android Q SDK
- จากหน้าจอต้อนรับของ Android Studio ให้คลิกกําหนดค่า > SDK Manager
- เลือกช่องทําเครื่องหมาย SDK ที่ต้องการ แล้วคลิกใช้
หากยังไม่มี SDK ระบบจะเริ่มดาวน์โหลด SDK ไปยังเครื่องของคุณ
บริการ Google Play
จากผู้จัดการ SDK คุณต้องติดตั้งบริการ Google Play ด้วย
- คลิกแท็บเครื่องมือ SDK และเลือกช่องทําเครื่องหมายบริการ Google Play
อัปเดตสถานะหากระบุว่ามีอัปเดต
3 เตรียมโปรแกรมจําลอง
หากต้องการเรียกใช้แอป คุณจะเชื่อมต่ออุปกรณ์ของตัวเองหรือใช้โปรแกรมจําลอง Android ก็ได้
หากใช้อุปกรณ์ของคุณเอง ให้ข้ามไปที่วิธีการของอุปกรณ์จริง: อัปเดตบริการ Google Play ที่ด้านล่างของหน้านี้
เพิ่มโปรแกรมจําลอง
- จากหน้าจอต้อนรับของ Android Studio ให้คลิกกําหนดค่า > เครื่องมือจัดการ AVD
ซึ่งจะเปิดกล่องโต้ตอบโปรแกรมจัดการอุปกรณ์เสมือนของ 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 สําหรับเมืองคีไฮ เมาอิ ในฮาวาย เพื่อจําลองผลจาก Codelab นี้)
- คลิกส่ง แล้วแผนที่จะอัปเดตในตําแหน่งนี้
คุณพร้อมที่จะเรียกใช้แอปและทดสอบด้วยตําแหน่งแล้ว
วิธีการสําหรับอุปกรณ์จริง - อัปเดตบริการ Google Play
หากใช้อุปกรณ์ Android จริง ให้ทําตามขั้นตอนต่อไปนี้
- ใช้แถบค้นหาบนหน้าจอหลักเพื่อค้นหาและเปิดบริการ Google Play
- คลิกรายละเอียดเพิ่มเติม
คลิกอัปเดต หากมี
4 สร้าง Shell ของแอปด้วยกิจกรรม Google Maps
- ในหน้าจอต้อนรับของ Android Studio ให้เลือกเริ่มโปรเจ็กต์ Android Studio ใหม่
- ในแท็บโทรศัพท์และแท็บเล็ต ให้เลือกกิจกรรมของ Google Maps
กล่องโต้ตอบกําหนดค่าโปรเจ็กต์จะเปิดขึ้น คุณตั้งชื่อแอปและสร้างแพ็กเกจตามโดเมนได้ที่นี่
นี่คือการตั้งค่าสําหรับแอปชื่อว่า "สถานที่ปัจจุบัน" ซึ่งสอดคล้องกับแพ็กเกจ com.google.codelab.currentplace
- เลือก Java เป็นภาษาและเลือก ใช้อาร์ติแฟกต์ androidx*
แล้วเก็บการตั้งค่าที่เหลือไว้เป็นค่าเริ่มต้น
- คลิกเสร็จสิ้น
5 เพิ่มทรัพยากร Dependency ของบริการของ Google ในไฟล์ Gradle Build
หากต้องการเข้าถึงสิทธิ์เข้าถึงตําแหน่งใน Android คุณต้องใช้ Google Location and API Recognition API จากบริการ Google Play สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่ม API และบริการ Google Play อื่นๆ โปรดดูตั้งค่าบริการ Google Play
โดยปกติแล้วโปรเจ็กต์ Android Studio จะมีไฟล์ build.gradle
อยู่ 2 ไฟล์ แท็บหนึ่งมีไว้สําหรับโปรเจ็กต์โดยรวมและอีกโปรเจ็กต์หนึ่งสําหรับแอป หากคุณมีโปรแกรมสํารวจโปรเจ็กต์ Android Studio ในมุมมอง Android คุณจะเห็นทั้ง 2 โฟลเดอร์ในโฟลเดอร์ Gradle Scripts
คุณต้องแก้ไขไฟล์ build.gradle (Module: app)
เพื่อเพิ่มบริการของ Google
- เพิ่ม 2 บรรทัดในส่วน
dependencies
เพื่อเพิ่มบริการของ Google สําหรับสถานที่ตั้งและ Places API (โค้ดตัวอย่างในบริบท)
build.gradle (โมดูล: แอป)
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 API และรับคีย์ API
สําหรับขั้นตอนการเปิดใช้ต่อไปนี้ คุณต้องเปิดใช้ Maps SDK สําหรับ Android และ Places API
ตั้งค่า Google Maps Platform
หากยังไม่มีบัญชี Google Cloud Platform และโปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงิน โปรดดูคู่มือการเริ่มต้นใช้งาน Google Maps Platform เพื่อสร้างบัญชีสําหรับการเรียกเก็บเงินและโปรเจ็กต์
- ใน Cloud Console ให้คลิกเมนูแบบเลื่อนลงของโปรเจ็กต์ แล้วเลือกโปรเจ็กต์ที่ต้องการใช้สําหรับ Codelab นี้
- เปิดใช้ Google Maps Platform API และ SDK ที่จําเป็นสําหรับ Codelab นี้ใน Google Cloud Marketplace โดยทําตามขั้นตอนในวิดีโอนี้หรือเอกสารนี้
- สร้างคีย์ API ในหน้าข้อมูลเข้าสู่ระบบของ Cloud Console คุณสามารถทําตามขั้นตอนในวิดีโอนี้หรือเอกสารนี้ คําขอทั้งหมดสําหรับ Google Maps Platform ต้องใช้คีย์ API
คัดลอกคีย์ API ที่คุณเพิ่งสร้าง กลับไปที่ Android Studio แล้วค้นหาไฟล์ google_maps_api.xml
ในส่วนAndroid > แอป > res > value
แทนที่ YOUR_KEY_HERE
ด้วยคีย์ API ที่คุณคัดลอก
กําหนดค่าแอปแล้ว
7 แก้ไขไฟล์เลย์เอาต์
- ในโปรแกรมสํารวจโปรเจ็กต์ ให้เปิดไฟล์
activity_maps.xml
ใน Android >app
และ gt;res
>layout
- & เลือกข้อความ และแทนที่เนื้อหาทั้งหมดของไฟล์เลย์เอาต์ด้วยสิ่งต่อไปนี้
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 แล้วเลือก New > Image Asset
Asset Studio จะเปิดขึ้น
- ในเมนูประเภทไอคอน คลิกแถบการทํางานและไอคอนแท็บ
- ตั้งชื่อเนื้อหา
ic_geolocate
- เลือกคลิปอาร์ตเป็นประเภทเนื้อหา****
- คลิกกราฟิกที่อยู่ถัดจากคลิปอาร์ต
ซึ่งจะเปิดหน้าต่างเลือกไอคอนขึ้นมา
- เลือกไอคอน
คุณใช้แถบค้นหาเพื่อค้นหาไอคอนที่เกี่ยวข้องกับความตั้งใจของคุณได้
- ค้นหา
location
และเลือกไอคอนที่เกี่ยวข้องกับตําแหน่ง
ไอคอนตําแหน่งของฉันจะเหมือนกับไอคอนที่ใช้ในแอป Google Maps เมื่อผู้ใช้ต้องการใช้กล้องเพื่อสแนปไปยังตําแหน่งปัจจุบัน
- คลิกตกลง > ถัดไป > เสร็จสิ้น แล้วยืนยันว่ามีโฟลเดอร์ใหม่ชื่อ
drawable
ที่มีไฟล์ไอคอนใหม่
เพิ่มทรัพยากรสตริง
- ใน 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
แล้วเลือก New > Directory เพื่อสร้างไดเรกทอรีย่อยใหม่ภายใต้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>
อัปเดตรูปแบบของแถบแอป
- ในโปรแกรมสํารวจโปรเจ็กต์ ให้ขยาย 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
ใน Explorer ของโปรเจ็กต์
ซึ่งอยู่ในโฟลเดอร์ที่สอดคล้องกับแพ็กเกจที่คุณสร้างสําหรับแอปในขั้นตอนที่ 1
- เปิดไฟล์และคุณอยู่ในตัวแก้ไขโค้ด Java
นําเข้า SDK ของ Places และทรัพยากร Dependency อื่นๆ
เพิ่มบรรทัดเหล่านี้ที่ด้านบนของ MapsActivity.java
โดยแทนที่คําสั่งนําเข้าที่มีอยู่
โดยจะมีการนําเข้าที่มีอยู่และเพิ่มอีกหลายรายการที่ใช้ในโค้ดใน Codelab นี้
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
ที่กําหนดไว้โดยค่าเริ่มต้นสําหรับกิจกรรมแผนที่
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);
}
เพิ่มโค้ดสําหรับเมนูแถบแอป
วิธีการทั้งสองข้างต้นจะเพิ่มเมนูแถบแอป (พร้อมด้วยรายการเดียว, ไอคอนเลือกสถานที่) และจัดการการใช้งานของผู้ใช้โดยคลิกไอคอน
คัดลอกทั้งสองวิธีนี้ไปยังไฟล์หลังเมธอด 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 ใน MapReady()
@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 onRequestPermissionResult()
/**
* 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
และเรียกงาน Places API findCurrentPlace
ได้ หากงานนั้นสําเร็จ งานจะส่งคืน findCurrentPlaceResponse
ซึ่งมีรายการออบเจ็กต์ placeLikelihood
แต่ละรายการจะมีพร็อพเพอร์ตี้จํานวนหนึ่ง ซึ่งรวมถึงชื่อและที่อยู่ของสถานที่ ตลอดจนความน่าจะเป็นที่คุณจะอยู่ในสถานที่นั้น (ค่าตั้งแต่ 0 ถึง 1) วิธีนี้จะจัดการคําตอบด้วยการสร้างรายการรายละเอียดของสถานที่จาก placeLikelihoods
โค้ดนี้จําลองสิ่งที่น่าจะใช้เวลาถึง 5 ครั้งและเพิ่มสถานที่ที่มีโอกาสได้รับมากกว่า 0 ลงในรายการซึ่งจะแสดงผล หากคุณต้องการแสดงมากกว่าหรือน้อยกว่า 5 รายการ โปรดแก้ไขค่าคงที่ M_MAX_ENTRIES
วางโค้ดนี้หลังเมธอด onMapReady
MapsActivity.java getCurrentPlaceLikelidoms()
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 selectCurrentPlace()
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
ได้ คุณยังสามารถตั้งค่า Listener การคลิก 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 FillPlaceLikelidoms()
// COMMENTED OUT UNTIL WE DEFINE THE METHOD
// Populate the ListView
fillPlacesList();
นั่นคือโค้ดทั้งหมดที่จําเป็นสําหรับเครื่องมือเลือกสถานที่ปัจจุบัน
13 เรียกใช้แอป
ทดสอบการเลือกสถานที่
- เรียกใช้แอปอีกครั้ง
ในตอนนี้เมื่อคุณแตะเลือกสถานที่ แอปจะแสดงรายการซึ่งประกอบด้วยชื่อที่อยู่ใกล้สถานที่ตั้งดังกล่าว ใกล้กับสถานที่นี้บนเกาะเมาวี เช่น ร้านขายน้ําแข็งไสฮาวาย Ululani' ร้านขายขนมริมหาด Sugar Beach เนื่องจากสถานที่หลายแห่งอยู่ใกล้กับพิกัดสถานที่ตั้งมาก นี่เป็นรายการสถานที่ที่คุณอาจอาศัยอยู่
- คลิกชื่อสถานที่ใน
ListView
คุณจะเห็นเครื่องหมายที่เพิ่มลงในแผนที่
- แตะเครื่องหมาย
คุณจะเห็นรายละเอียดสถานที่
ทดสอบตําแหน่งอื่น
หากต้องการเปลี่ยนตําแหน่งและใช้โปรแกรมจําลอง ตําแหน่งของอุปกรณ์จะไม่อัปเดตโดยอัตโนมัติเมื่อคุณอัปเดตพิกัดสถานที่ตั้งในเมนูแบบขยายของโปรแกรมจําลอง
หากต้องการหลีกเลี่ยงขั้นตอนเหล่านี้ ให้ทําตามขั้นตอนต่อไปนี้เพื่อใช้แอป Google Maps แบบเนทีฟเพื่อบังคับให้อัปเดตตําแหน่งของโปรแกรมจําลอง':
- เปิด Google Maps
- แตะ ... > ตําแหน่งเพื่อเปลี่ยนละติจูดและลองจิจูดเป็นพิกัดใหม่ จากนั้นแตะส่ง
- ตัวอย่างเช่น คุณสามารถใช้ละติจูด: 49.2768 และลองจิจูด: -123.1142 เพื่อตั้งค่าตําแหน่งเป็นใจกลางเมืองแวนคูเวอร์ แคนาดา
- ยืนยันว่า Google Maps ได้อัปเดตพิกัดใหม่เรียบร้อยแล้ว คุณอาจต้องแตะปุ่มตําแหน่งของฉันในแอป Google Maps เพื่อขอให้จัดกึ่งกลางใหม่
- กลับไปที่แอปสถานที่ปัจจุบัน แล้วแตะเลือกสถานที่ เพื่อดูแผนที่ในพิกัดใหม่และดูรายการสถานที่ที่เป็นไปได้ในปัจจุบันใหม่
เพียงเท่านี้ก็เรียบร้อยแล้ว คุณสร้างแอปแบบง่ายที่จะตรวจสอบสถานที่ ณ ตําแหน่งปัจจุบันและมีแนวโน้มว่าคุณอยู่ที่ไหน ขอให้สนุกกับการเรียนรู้
ทีนี้ก็เริ่มต้นใช้งานแอปเวอร์ชันดัดแปลงด้วยการทําตามขั้นตอนพิเศษนี้ได้เลย
14 ขั้นตอนถัดไป
หากต้องการรักษาความปลอดภัยให้คีย์ API ของคุณ คุณต้องรักษาความปลอดภัยเพื่อให้คีย์ของแอป Android เท่านั้นที่ใช้ได้ หากไม่จํากัดไว้ ใครก็ตามที่ใช้คีย์ของคุณจะใช้เรียก 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 ของใบรับรอง ลายนิ้วมือคือลําดับเลขฐานสิบหก 20 หลักที่คั่นด้วยโคลอน
เมื่อพร้อมเปิดตัวแอปแล้ว ให้ใช้วิธีการในเอกสารนี้เพื่อเรียกข้อมูลใบรับรองรุ่น
เพิ่มข้อจํากัดลงในคีย์ API
- ใน Cloud Console ให้ไปที่ API & &; Services > Credentials
คีย์ที่คุณใช้สําหรับแอปนี้ควรอยู่ในคีย์ 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
- หากต้องการดูวิธีจัดการสิทธิ์เข้าถึงตําแหน่งแบบข้ามรัฐใน Android Q ให้กรอก Codelab สําหรับการรับการอัปเดตตําแหน่งใน Android ด้วย Kotlin