ส่วนนี้จะอธิบายสถานการณ์การรวบรวมข้อมูลตําแหน่งทั่วไป รวมถึงคําแนะนําในการใช้ API ของการกำหนดเขตพื้นที่เสมือนและผู้ให้บริการตำแหน่งแบบรวมให้มีประสิทธิภาพสูงสุด
การอัปเดตที่ผู้ใช้มองเห็นหรืออยู่เบื้องหน้า
ตัวอย่าง: แอปการแมปที่ต้องอัปเดตบ่อยครั้งและถูกต้องโดยมีเวลาในการตอบสนองต่ำมาก การอัปเดตทั้งหมดเกิดขึ้นในเบื้องหน้า เช่น ผู้ใช้เริ่มกิจกรรม ใช้ข้อมูลตําแหน่ง แล้วหยุดกิจกรรมหลังจากผ่านไปครู่หนึ่ง
ใช้เมธอด setPriority()
ที่มีค่าเป็น PRIORITY_HIGH_ACCURACY
หรือ PRIORITY_BALANCED_POWER_ACCURACY
ช่วงเวลาที่ระบุในเมธอด setInterval()
จะขึ้นอยู่กับกรณีการใช้งาน โดยให้ตั้งค่าเป็น 2-3 วินาทีสำหรับสถานการณ์แบบเรียลไทม์ หรือจำกัดไว้ที่ 2-3 นาที (แนะนำให้ตั้งค่าไว้ที่ประมาณ 2 นาทีขึ้นไปเพื่อลดการใช้แบตเตอรี่)
ทราบตำแหน่งของอุปกรณ์
ตัวอย่างเช่น แอปสภาพอากาศต้องการทราบตำแหน่งของอุปกรณ์
ใช้เมธอด getLastLocation()
ซึ่งจะแสดงตําแหน่งล่าสุดที่ใช้ได้ (ซึ่งในบางกรณีอาจเป็นค่าว่าง) วิธีนี้เป็นวิธีที่ตรงไปตรงมาในการหาตำแหน่งและไม่ทำให้เกิดค่าใช้จ่ายที่เกี่ยวข้องกับการส่งคำขออัปเดตตำแหน่งอย่างต่อเนื่อง ใช้ร่วมกับเมธอด isLocationAvailable()
ซึ่งจะแสดงผล true
เมื่อตำแหน่งที่แสดงผลโดย getLastLocation()
เป็นข้อมูลล่าสุดพอสมควร
เริ่มอัปเดตเมื่อผู้ใช้อยู่ที่ตำแหน่งที่เฉพาะเจาะจง
ตัวอย่างเช่น การขอข้อมูลอัปเดตเมื่อผู้ใช้อยู่ในระยะที่กำหนดจากที่ทำงาน บ้าน หรือสถานที่อื่น
ใช้การกำหนดเขตพื้นที่เสมือนร่วมกับการอัปเดตผู้ให้บริการตำแหน่งแบบรวม ขอการอัปเดตเมื่อแอปได้รับการทริกเกอร์การเข้าสู่พื้นที่เสมือน และนำการอัปเดตออกเมื่อแอปได้รับการทริกเกอร์การออกจากพื้นที่เสมือน วิธีนี้ช่วยให้แอปได้รับการอัปเดตตำแหน่งที่ละเอียดยิ่งขึ้นก็ต่อเมื่อผู้ใช้เข้าสู่พื้นที่ที่กำหนดเท่านั้น
เวิร์กโฟลว์ทั่วไปสำหรับสถานการณ์นี้อาจเกี่ยวข้องกับการแสดงการแจ้งเตือนเมื่อมีการเข้าสู่การเปลี่ยนผ่านเขตพื้นที่เสมือน และการเปิดใช้งานกิจกรรมซึ่งมีโค้ดเพื่อขอข้อมูลอัปเดตเมื่อผู้ใช้แตะการแจ้งเตือน
เริ่มอัปเดตตามสถานะกิจกรรมของผู้ใช้
ตัวอย่างเช่น ขอการอัปเดตเฉพาะเมื่อผู้ใช้ขับรถหรือขี่จักรยาน
ใช้ Activity Recognition API ร่วมกับการอัปเดตผู้ให้บริการตำแหน่งแบบรวม ขอการอัปเดตเมื่อตรวจพบกิจกรรมเป้าหมาย และนําการอัปเดตออกเมื่อผู้ใช้หยุดทํากิจกรรมนั้น
เวิร์กโฟลว์ทั่วไปสำหรับกรณีการใช้งานนี้อาจเกี่ยวข้องกับการแสดงการแจ้งเตือนสำหรับกิจกรรมที่ตรวจพบ และการเปิดใช้งานกิจกรรมซึ่งมีโค้ดเพื่อขอข้อมูลอัปเดตเมื่อผู้ใช้แตะการแจ้งเตือน
การอัปเดตตำแหน่งในเบื้องหลังที่ทำงานต่อเนื่องเป็นเวลานานซึ่งเชื่อมโยงกับพื้นที่ทางภูมิศาสตร์
ตัวอย่างเช่น ผู้ใช้ต้องการรับการแจ้งเตือนเมื่ออุปกรณ์อยู่ใกล้ๆ ผู้ค้าปลีก
นี่เป็นกรณีการใช้งานที่ยอดเยี่ยมสําหรับการกำหนดเขตพื้นที่เสมือน เนื่องจากกรณีการใช้งานเกือบจะเกี่ยวข้องกับตําแหน่งในเบื้องหลัง ให้ใช้วิธีการ addGeofences(GeofencingRequest, PendingIntent)
คุณควรตั้งค่าตัวเลือกการกําหนดค่าต่อไปนี้
หากคุณกำลังติดตามการเปลี่ยนสถานะการหยุดอยู่ที่หน้าเว็บ ให้ใช้เมธอด
setLoiteringDelay()
ที่ส่งค่าประมาณ 5 นาทีหรือน้อยกว่าใช้
setNotificationResponsiveness()
โดยส่งค่าประมาณ 5 นาที อย่างไรก็ตาม ให้พิจารณาใช้ค่าประมาณ 10 นาทีหากแอปของคุณจัดการกับความล่าช้าในการตอบสนองที่เพิ่มขึ้นได้
แอปจะลงทะเบียนเขตพื้นที่เสมือนได้สูงสุดครั้งละ 100 รายการเท่านั้น ใน Use Case ที่แอปต้องการติดตามตัวเลือกผู้ค้าปลีกจํานวนมาก แอปอาจต้องลงทะเบียนเขตพื้นที่เสมือนขนาดใหญ่ (ที่ระดับเมือง) และลงทะเบียนเขตพื้นที่เสมือนขนาดเล็กแบบไดนามิก (สําหรับสถานที่ภายในเมือง) สําหรับร้านค้าภายในเขตพื้นที่เสมือนขนาดใหญ่ เมื่อผู้ใช้เข้าสู่เขตพื้นที่เสมือนขนาดใหญ่ ให้เพิ่มเขตพื้นที่เสมือนขนาดเล็ก เมื่อผู้ใช้ออกจากเขตพื้นที่เสมือนขนาดใหญ่ ให้นำเขตพื้นที่เสมือนขนาดเล็กออกและลงทะเบียนเขตพื้นที่เสมือนใหม่สำหรับพื้นที่ใหม่
การอัปเดตตำแหน่งในเบื้องหลังที่ทำงานเป็นเวลานานโดยไม่มีคอมโพเนนต์แอปที่มองเห็นได้
ตัวอย่าง: แอปที่ติดตามตำแหน่งแบบไม่โต้ตอบ
ใช้วิธีการ setPriority()
กับตัวเลือก PRIORITY_NO_POWER
หากเป็นไปได้ เนื่องจากแทบจะไม่ทำให้แบตเตอรี่หมด หากใช้ PRIORITY_NO_POWER
ไม่ได้ ให้ใช้ PRIORITY_BALANCED_POWER_ACCURACY
หรือ
PRIORITY_LOW_POWER
แต่หลีกเลี่ยงการใช้ PRIORITY_HIGH_ACCURACY
สำหรับการทำงานในเบื้องหลังอย่างต่อเนื่อง เนื่องจากตัวเลือกนี้จะกินแบตเตอรี่อย่างมาก
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับตำแหน่ง ให้ใช้ตำแหน่งแบบพาสซีฟโดยเรียกใช้เมธอด setFastestInterval()
โดยส่งค่าที่น้อยกว่าค่าที่คุณส่งให้กับ setInterval()
เมื่อใช้ร่วมกับตัวเลือก PRIORITY_NO_POWER
ตำแหน่งแบบไม่ระบุแหล่งที่มาจะส่งตำแหน่งที่แอปอื่นๆ คำนวณไว้โดยอัตโนมัติโดยไม่มีค่าใช้จ่ายเพิ่มเติม
ควบคุมความถี่ด้วยการเพิ่มเวลาในการตอบสนองโดยใช้เมธอด setMaxWaitTime()
ตัวอย่างเช่น หากคุณใช้เมธอด setinterval()
ที่มีค่าประมาณ 10 นาที คุณควรพิจารณาเรียกใช้ setMaxWaitTime()
ที่มีค่าระหว่าง 30 ถึง 60 นาที เมื่อใช้ตัวเลือกเหล่านี้ ระบบจะคํานวณตําแหน่งของแอปทุกๆ 10 นาทีโดยประมาณ แต่แอปจะตื่นขึ้นทุกๆ 30-60 นาทีเมื่อมีข้อมูลตําแหน่งบางส่วนพร้อมใช้งานสำหรับการอัปเดตแบบเป็นกลุ่ม แนวทางนี้ใช้การรอสายเพื่อแลกกับข้อมูลที่พร้อมใช้งานมากขึ้นและประสิทธิภาพแบตเตอรี่ที่ดีขึ้น
การอัปเดตความแม่นยำสูงบ่อยครั้งขณะที่ผู้ใช้โต้ตอบกับแอปอื่นๆ
ตัวอย่างเช่น แอปการนำทางหรือแอปฟิตเนสที่ทำงานต่อไปเมื่อผู้ใช้ปิดหน้าจอหรือเปิดแอปอื่น
ใช้บริการที่ทำงานอยู่เบื้องหน้า หากแอปของคุณอาจดำเนินการที่ต้องใช้ค่าใช้จ่ายสูงในนามของผู้ใช้ แนวทางปฏิบัติแนะนำคือแจ้งให้ผู้ใช้ทราบถึงการดำเนินการดังกล่าว บริการที่ทำงานอยู่เบื้องหน้าต้องมีการแจ้งเตือนแบบถาวร ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมการแจ้งเตือน