Android 8.0 (API ระดับ 26) จะจำกัดความถี่ที่แอปสามารถเรียกดูตำแหน่งปัจจุบันของผู้ใช้ขณะที่แอปทำงานอยู่เบื้องหลัง เพื่อลดการใช้พลังงาน ภายใต้เงื่อนไขเหล่านี้ แอปจะได้รับการอัปเดตตำแหน่งเพียงไม่กี่ครั้งต่อชั่วโมง
หมายเหตุ: ข้อจำกัดเหล่านี้มีผลกับแอปทั้งหมดที่ใช้ในอุปกรณ์ที่ใช้ Android 8.0 (API ระดับ 26) ขึ้นไป โดยไม่คำนึงถึงเวอร์ชัน SDK เป้าหมายของแอป
คุณควรคำนึงถึงลักษณะการดึงข้อมูลตำแหน่งนี้เป็นพิเศษหากแอปของคุณอาศัยการแจ้งเตือนแบบเรียลไทม์หรือการตรวจจับการเคลื่อนไหวขณะทำงานในเบื้องหลัง
เก็บรักษาลักษณะการทํางานของแอปที่ทำงานอยู่เบื้องหน้า
หากแอปทำงานอยู่เบื้องหน้าในอุปกรณ์ที่ใช้ Android 8.0 (API ระดับ 26) ลักษณะการอัปเดตตำแหน่งจะเหมือนกับใน Android 7.1.1 (API ระดับ 25) และต่ำกว่า
คำเตือน: หากแอปของคุณดึงข้อมูลอัปเดตตำแหน่งแบบเกือบเรียลไทม์เป็นระยะเวลานาน อายุการใช้งานแบตเตอรี่ของอุปกรณ์จะสั้นลงอย่างมาก
การปรับลักษณะการทํางานของตําแหน่งของแอป
พิจารณาว่า Use Case ของแอปสำหรับการทํางานในเบื้องหลังจะประสบความสําเร็จไม่ได้เลยหากแอปได้รับการอัปเดตตําแหน่งไม่บ่อย ในกรณีนี้ คุณสามารถเรียกข้อมูลอัปเดตตำแหน่งให้บ่อยขึ้นได้โดยทำตามวิธีใดวิธีหนึ่งต่อไปนี้
- ดึงแอปมาไว้ที่เบื้องหน้า
-
เริ่มบริการที่ทำงานอยู่เบื้องหน้าในแอปโดยเรียกใช้
startForegroundService()
เมื่อบริการที่ทำงานอยู่เบื้องหน้าดังกล่าวทำงานอยู่ บริการจะปรากฏเป็นการแจ้งเตือนต่อเนื่องในพื้นที่การแจ้งเตือนข้อควรระวัง: หากแอปเริ่มบริการที่ทำงานอยู่เบื้องหน้าขณะทำงานอยู่เบื้องหลังในอุปกรณ์ที่ใช้ Android 11 (API ระดับ 30) ขึ้นไป แอปจะเข้าถึงข้อมูลตำแหน่งไม่ได้ เว้นแต่ผู้ใช้จะมอบสิทธิ์
ACCESS_BACKGROUND_LOCATION
ให้แอปของคุณ ดูข้อมูลเพิ่มเติมได้จากคำแนะนำเกี่ยวกับข้อจำกัดขณะใช้งานที่เชื่อมโยงกับบริการที่ทำงานอยู่เบื้องหน้า -
ใช้องค์ประกอบของ Geofencing API เช่น
GeofencingClient
ซึ่งเพิ่มประสิทธิภาพเพื่อลดการใช้พลังงาน - ใช้เครื่องมือรับฟังตำแหน่งแบบพาสซีฟ ซึ่งอาจได้รับการอัปเดตตำแหน่งเร็วขึ้นหากมีแอปที่ทำงานอยู่เบื้องหน้าขอการอัปเดตตำแหน่งในอัตราที่เร็วขึ้น
หมายเหตุ: หากแอปของคุณจำเป็นต้องเข้าถึงประวัติตำแหน่งที่มีการอัปเดตเป็นระยะๆ ให้ใช้องค์ประกอบ Fused Location Provider API เวอร์ชันเป็นกลุ่ม เช่น อินเทอร์เฟซ FusedLocationProviderApi
เมื่อแอปทำงานอยู่เบื้องหลัง API นี้จะรับตำแหน่งของผู้ใช้บ่อยกว่า API ที่ไม่รวมกลุ่ม อย่างไรก็ตาม โปรดทราบว่าแอปของคุณจะยังคงได้รับการอัปเดตเป็นกลุ่มเพียงไม่กี่ครั้งในแต่ละชั่วโมง
API ที่ได้รับผลกระทบ
การเปลี่ยนแปลงลักษณะการดึงข้อมูลตำแหน่งในแอปที่ทำงานอยู่เบื้องหลังจะส่งผลต่อ API ต่อไปนี้
- ผู้ให้บริการตำแหน่งแบบรวม (FLP)
-
-
หากแอปทำงานอยู่เบื้องหลัง บริการระบบตำแหน่งจะคำนวณตำแหน่งใหม่สำหรับแอปเพียงไม่กี่ครั้งในแต่ละชั่วโมง กรณีนี้จะเกิดขึ้นแม้ว่าแอปจะขอการอัปเดตตำแหน่งบ่อยขึ้น
อย่างไรก็ตาม เมื่อใช้ FLP เวอร์ชันแบบเป็นกลุ่ม คุณจะมีสิทธิ์เข้าถึงประวัติตำแหน่งตามช่วงเวลาที่บ่อยขึ้นหลังจากที่แอปได้รับการอัปเดตแบบเป็นกลุ่ม ซึ่งจะเกิดขึ้นเพียงไม่กี่ครั้งในแต่ละชั่วโมง
- หากแอปทำงานอยู่เบื้องหน้า อัตราการสุ่มตัวอย่างตำแหน่งจะไม่มีการเปลี่ยนแปลงเมื่อเทียบกับ Android 7.1.1 (API ระดับ 25)
-
- การกำหนดเขตพื้นที่เสมือน
-
- แอปที่ทำงานอยู่เบื้องหลังจะรับเหตุการณ์การเปลี่ยนเขตพื้นที่เสมือนได้บ่อยกว่าการอัปเดตจาก Fused Location Provider
- การตอบสนองโดยเฉลี่ยสําหรับเหตุการณ์การกำหนดเขตพื้นที่เสมือนคือทุก 2-3 นาที
- การวัด GNSS และข้อความการนำทาง GNSS
-
- เมื่อแอปทำงานอยู่เบื้องหลัง แคล็กแบ็กที่ลงทะเบียนเพื่อรับเอาต์พุตจาก
GnssMeasurement
และGnssNavigationMessage
จะหยุดทำงาน
- เมื่อแอปทำงานอยู่เบื้องหลัง แคล็กแบ็กที่ลงทะเบียนเพื่อรับเอาต์พุตจาก
- เครื่องมือจัดการตำแหน่ง
-
-
ระบบจะส่งการอัปเดตตำแหน่งไปยังแอปที่ทำงานอยู่เบื้องหลังเพียงไม่กี่ครั้งในแต่ละชั่วโมง
หมายเหตุ: หากแอปทำงานในอุปกรณ์ที่ติดตั้งบริการ Google Play เราขอแนะนำให้ใช้ผู้ให้บริการตำแหน่งแบบรวม (FLP) แทน
-
- เครื่องมือจัดการ Wi-Fi
-
เมธอด
startScan()
จะสแกนแอปเบื้องหลังอย่างเต็มรูปแบบเพียงไม่กี่ครั้งต่อชั่วโมง หากแอปเบื้องหลังเรียกใช้เมธอดนี้อีกครั้งในไม่ช้าหลังจากนั้น คลาสWifiManager
จะแสดงผลลัพธ์ที่แคชไว้จากการสแกนครั้งก่อนหน้า