ขีดจำกัดของตำแหน่งในพื้นหลัง
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
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
-
- เครื่องมือจัดการตำแหน่ง
-
- เครื่องมือจัดการ Wi-Fi
-
เมธอด
startScan()
จะสแกนแอปเบื้องหลังอย่างเต็มรูปแบบเพียงไม่กี่ครั้งต่อชั่วโมง หากแอปเบื้องหลังเรียกใช้เมธอดนี้อีกครั้งในไม่ช้าหลังจากนั้น คลาส WifiManager
จะแสดงผลลัพธ์ที่แคชไว้จากการสแกนครั้งก่อนหน้า
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Background Location Limits\n\nIn an effort to reduce power consumption, Android 8.0 (API level 26) limits\nhow frequently an app can retrieve the user's current location while the app is\n[running in the background](/guide/background). Under these\nconditions, apps can receive location updates only a few times each hour.\n\n**Note:** These limitations apply to all apps used on devices\nrunning Android 8.0 (API level 26) or higher, **regardless of an app's\ntarget SDK version**.\n\nThis location retrieval behavior is particularly\nimportant to keep in mind if your app relies on real-time alerts or motion\ndetection while running in the background.\n\nForeground app behavior is preserved\n------------------------------------\n\n\nIf an app is in the foreground on a device running Android 8.0 (API level 26),\nthe location update behavior is the same as on Android 7.1.1 (API level\n25) and lower.\n\n**Warning:** If your app retrieves near real-time location\nupdates over a long period of time, the device's battery life becomes\nsignificantly shorter.\n\nTuning your app's location behavior\n-----------------------------------\n\nConsider whether your app's use cases for running in the background cannot\nsucceed at all if your app receives infrequent location updates. If this is the\ncase, you can retrieve location updates more frequently by performing one of the\nfollowing actions:\n\n- Bring your app to the foreground.\n- Start a [foreground\n service](/guide/components/foreground-services) in your app by calling\n [startForegroundService()](/reference/android/content/Context#startForegroundService(android.content.Intent)). When such a foreground service is active, it\n appears as an ongoing notification in the\n [notification\n area](/guide/topics/ui/notifiers/notifications).\n\n **Caution:** If your app starts a foreground service\n while running in the background on a device that runs Android 11 (API\n level 30) or higher, your app cannot access location information unless the\n user has granted the\n [`ACCESS_BACKGROUND_LOCATION`](/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION)\n permission to your app. For more information, view the guidance about the\n [while-in-use\n restrictions](/guide/components/foreground-services#while-in-use-restrictions) that are associated with foreground services.\n- Use elements of the Geofencing API, such as the [`GeofencingClient`](https://developers.google.com/android/reference/com/google/android/gms/location/GeofencingClient), which are optimized for minimizing power use.\n- Use a passive location listener, which may receive faster location updates if there are foreground apps requesting location updates at a faster rate.\n\n**Note:** If your app needs access to location history that\ncontains time-frequent updates, use the batched version of the Fused Location\nProvider API elements, such as the\n[`FusedLocationProviderApi`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\ninterface. When your app is running in the background, this API receives the\nuser's location more frequently than the non-batched API. Keep in mind, however,\nthat your app still receives updates in batches only a few times each hour.\n\nAffected APIs\n-------------\n\n\nThe changes to location retrieval behavior in background apps affect the\nfollowing APIs:\n\n[Fused\nLocation Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi)\n:\n - If your app is running in the background, the location system service\n computes a new location for your app only a few times each hour. This\n is the case even when your app is requesting more frequent location\n updates.\n\n By using the\n [batched version](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest#setMaxWaitTime(long)) of FLP, however, you have access to more\n time-frequent location history after your app receives a batch update,\n which also occurs only a few times each hour.\n - If your app is running in the foreground, there is no change in location sampling rates compared to Android 7.1.1 (API level 25).\n\nGeofencing\n:\n - Background apps can receive geofencing transition events more frequently than updates from the Fused Location Provider.\n - The average responsiveness for a geofencing event is every couple of minutes or so.\n\nGNSS Measurements and GNSS Navigation Messages\n:\n - When your app is in the background, callbacks that are registered to receive outputs from [GnssMeasurement](/reference/android/location/GnssMeasurement) and [GnssNavigationMessage](/reference/android/location/GnssNavigationMessage) stop executing.\n\nLocation Manager\n:\n - Location updates are provided to background apps only a few times\n each hour.\n\n\n **Note:** If your app is running on a device with\n Google Play services installed, it is highly recommended that you use\n the [Fused\n Location Provider (FLP)](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi) instead.\n\nWi-Fi Manager\n:\n The [startScan()](/reference/android/net/wifi/WifiManager#startScan()) method\n performs a full scan for background apps only a few times each hour. If a\n background app calls the method again soon afterward, the\n [WifiManager](/reference/android/net/wifi/WifiManager) class provides cached results from the\n previous scan."]]