รับตำแหน่งที่รู้จักล่าสุด

เมื่อใช้ API ตำแหน่งของบริการ Google Play แอปของคุณสามารถขอ ตำแหน่งที่ทราบของอุปกรณ์ของผู้ใช้ ในกรณีส่วนใหญ่ คุณสนใจใน ตำแหน่งปัจจุบันของผู้ใช้ ซึ่งปกติจะเทียบเท่ากับตำแหน่งที่ทราบล่าสุด ตำแหน่งของอุปกรณ์

ให้ใช้ รวมเข้าด้วยกัน ผู้ให้บริการตำแหน่งเพื่อเรียกข้อมูลตำแหน่งที่ทราบล่าสุดของอุปกรณ์ ไฟแรง ผู้ให้บริการตำแหน่งเป็นหนึ่งใน API ตำแหน่งในบริการ Google Play ทั้งนี้ จัดการเทคโนโลยีระบุตำแหน่งพื้นฐาน และให้ API แบบง่ายเพื่อให้ คุณสามารถระบุความต้องการในระดับสูง เช่น ความแม่นยำสูงหรือพลังงานต่ำ และยังเพิ่มประสิทธิภาพการใช้พลังงานแบตเตอรี่ของอุปกรณ์ด้วย

หมายเหตุ: เมื่อแอปทำงานอยู่เบื้องหลัง การเข้าถึงตำแหน่งควรเป็น ที่สำคัญต่อฟังก์ชันการทำงานหลักของแอป และมาพร้อมกับ ที่เปิดเผยต่อผู้ใช้

บทเรียนนี้แสดงวิธีส่งคำขอตำแหน่งของ โดยใช้ getLastLocation() ในผู้ให้บริการ Fused Location

ตั้งค่าบริการ Google Play

หากต้องการเข้าถึงผู้ให้บริการ Fused Location โปรเจ็กต์พัฒนาของแอปจะต้อง รวมถึงบริการ Google Play ดาวน์โหลดและติดตั้งบริการ Google Play คอมโพเนนต์ผ่าน SDK ผู้จัดการ และเพิ่มไลบรารีลงในโครงการของคุณ โปรดดูรายละเอียดในคู่มือ การตั้งค่า Google Play บริการ

ระบุสิทธิ์ของแอป

แอปที่มีฟีเจอร์ที่ใช้บริการตำแหน่งต้อง ขอสิทธิ์เข้าถึงตำแหน่ง โดยขึ้นอยู่กับกรณีการใช้งานฟีเจอร์เหล่านั้น

สร้างไคลเอ็นต์บริการตำแหน่ง

ในเมธอด onCreate() ของกิจกรรม สร้างอินสแตนซ์ของไคลเอ็นต์ Fused Location Provider ในข้อมูลโค้ดต่อไปนี้

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

รับตำแหน่งที่รู้จักล่าสุด

เมื่อคุณสร้างไคลเอ็นต์บริการตำแหน่ง คุณจะเห็นตำแหน่งล่าสุดที่ทราบของอุปกรณ์ของผู้ใช้ เมื่อแอปของคุณ อยู่เมื่อใช้ผู้ให้บริการ Fused Location Provider getLastLocation() วิธีการดึงข้อมูลตำแหน่งของอุปกรณ์ ความแม่นยำของตำแหน่งที่แสดงผล ระบบกำหนดสิทธิ์นี้ตามการตั้งค่าสิทธิ์ ที่คุณป้อนไว้ในแอป ไฟล์ Manifest ตามที่อธิบายไว้ในคำแนะนำเกี่ยวกับวิธี ขอสิทธิ์เข้าถึงตำแหน่ง

หากต้องการขอตำแหน่งสุดท้ายที่ทราบ ให้เรียกใช้ getLastLocation() ตัวอย่างข้อมูลโค้ดต่อไปนี้แสดงคำขอและการจัดการ การตอบกลับ:

Kotlin

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
            // Got last known location. In some rare situations this can be null.
        }

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

getLastLocation() จะแสดงผล Task ซึ่งคุณสามารถใช้เพื่อดู Location ที่มีพิกัดละติจูดและลองจิจูดของ ตำแหน่งทางภูมิศาสตร์ ออบเจ็กต์ตำแหน่งอาจเป็น null ใน สถานการณ์ต่อไปนี้

  • ตำแหน่งปิดอยู่ในการตั้งค่าอุปกรณ์ ผลลัพธ์อาจเป็น null แม้ว่าจะมีการดึงข้อมูลตำแหน่งล่าสุดก่อนหน้านี้เนื่องจาก การปิดใช้งานตำแหน่งจะล้างแคชด้วย
  • อุปกรณ์ไม่เคยบันทึกตำแหน่งของตัวเองเลย ซึ่งอาจเป็นกรณีของ หรืออุปกรณ์ที่มีการคืนค่าเป็นการตั้งค่าเริ่มต้นแล้ว
  • บริการ Google Play ในอุปกรณ์รีสตาร์ทแล้วและไม่มีการเปิดใช้งาน ไคลเอ็นต์ Fused Location Provider ที่ขอตำแหน่งหลังจาก รีสตาร์ทบริการแล้ว เพื่อหลีกเลี่ยงสถานการณ์นี้ คุณอาจสร้างลูกค้าใหม่และ ส่งคำขออัปเดตตำแหน่งด้วยตนเอง สำหรับข้อมูลเพิ่มเติม โปรดดู ตำแหน่งการรับ อัปเดต

เลือกค่าประมาณตำแหน่งที่ดีที่สุด

FusedLocationProviderClient มีวิธีเรียกข้อมูลอุปกรณ์หลายวิธี ข้อมูลสถานที่ เลือกจากตัวเลือกต่อไปนี้ โดยขึ้นอยู่กับแอปของคุณ กรณีการใช้งาน:

  • getLastLocation() ได้รับการระบุตำแหน่งโดยประมาณเร็วขึ้น และลดการใช้งานแบตเตอรี่ที่สามารถ ที่มาจากแอปของคุณ อย่างไรก็ตาม ข้อมูลตำแหน่งอาจไม่ใช่ข้อมูลล่าสุด หากไม่มีลูกค้ารายอื่น ใช้ตำแหน่งเมื่อเร็วๆ นี้
  • getCurrentLocation() ได้รับตำแหน่งที่ใหม่กว่าและแม่นยำมากขึ้นได้อย่างสม่ำเสมอ แต่วิธีนี้ อาจทำให้ระบบคำนวณตำแหน่งที่ใช้งานอยู่ในอุปกรณ์

    นี่คือวิธีที่แนะนำเพื่อให้ได้ตำแหน่งใหม่เมื่อเป็นไปได้ และ ปลอดภัยกว่าวิธีอื่นๆ เช่น การเริ่มและจัดการการอัปเดตตำแหน่ง ตัวคุณเองโดยใช้ requestLocationUpdates() หากแอปเรียก requestLocationUpdates() บางครั้งแอปของคุณอาจใช้ เปิด/ปิดหากตำแหน่งไม่พร้อมใช้งาน หรือหากคำขอไม่ได้หยุดทำงานอย่างถูกต้อง หลังจากได้สถานที่ใหม่

แหล่งข้อมูลเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดึงข้อมูลตำแหน่งปัจจุบันใน Android โปรดดู เนื้อหาต่อไปนี้:

ตัวอย่าง

  • แอปตัวอย่างเพื่อแสดงแนวทางปฏิบัติแนะนำขณะดึงข้อมูล ตำแหน่งปัจจุบัน