ตรวจหาตำแหน่งใน Wear OS

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

ดูข้อมูลเพิ่มเติมได้ที่สร้างแอปที่รับรู้ถึงตำแหน่ง

นาฬิกาบางรุ่นมีเซ็นเซอร์ GPS ในตัวซึ่งจะดึงข้อมูลตำแหน่งโดยไม่ต้องใช้โทรศัพท์ที่เชื่อมต่อ เมื่อคุณขอข้อมูลตำแหน่งในแอปนาฬิกา ระบบจะดึงข้อมูลตำแหน่งจากโทรศัพท์หรือนาฬิกาโดยใช้วิธีที่มีประสิทธิภาพด้านพลังงานมากที่สุด ดังนั้นแม้ว่านาฬิกาจะไม่มีเซ็นเซอร์ GPS คุณก็ยังรับข้อมูลตำแหน่งได้

หากต้องการลดผลกระทบของการรับข้อมูลตำแหน่งต่ออายุการใช้งานแบตเตอรี่ ให้เรียกใช้ setPriority() ด้วยค่า PRIORITY_BALANCED_POWER_ACCURACY การตั้งค่าลำดับความสำคัญที่แตกต่างกันอาจเพิ่มประสิทธิภาพชิปแตกต่างกัน

หากเป็นไปได้ ให้ประหยัดแบตเตอรี่โดยขอตำแหน่งไม่เกิน 1 ครั้งต่อนาทีโดยใช้ setInterval()

ตามที่อธิบายไว้ในส่วนต่อๆ ไป แอปของคุณต้องจัดการการสูญเสีย ข้อมูลตำแหน่งเมื่อนาฬิกาที่ไม่มีเซ็นเซอร์ตัดการเชื่อมต่อจากโทรศัพท์

เลือกวิธี

คุณระบุข้อมูลตำแหน่งให้กับแอป Wear OS ได้ 2 วิธี ได้แก่ ใช้ Fused Location Provider (FLP) หรือ Wear Health Services (WHS) FLP เป็น API ของบริการ Google Play

ใช้ FLP ในกรณีต่อไปนี้

  • คุณต้องการข้อมูลตำแหน่งในขณะนั้น แต่ไม่ต้องการอย่างต่อเนื่อง เช่น การทำเครื่องหมาย ตำแหน่งของรถที่จอด
  • คุณต้องการตำแหน่งอย่างต่อเนื่องแต่ไม่ต้องการประวัติตำแหน่ง

ใช้ WHS ในกรณีต่อไปนี้

  • คุณต้องการข้อมูลจากเซ็นเซอร์อื่นๆ หรือมีแนวโน้มที่จะต้องการข้อมูลจากเซ็นเซอร์อื่นๆ ในอนาคต
  • แอปของคุณเป็นแอปออกกำลังกายหรือแอปการออกกำลังกายที่ต้องติดตามข้อมูลตำแหน่งในช่วงเวลาที่เฉพาะเจาะจง

ใช้ Fused Location Provider

ในนาฬิกา ให้รับข้อมูลตำแหน่งโดยใช้ FusedLocationProviderClient FLP อาจใช้ข้อมูลตำแหน่งจากโทรศัพท์ โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสร้างไคลเอ็นต์บริการตำแหน่ง

ดูข้อมูลเกี่ยวกับการขออัปเดตตำแหน่งและการติดตามตำแหน่งของผู้ใช้แบบต่อเนื่องได้ที่ขออัปเดตตำแหน่ง

ตรวจหา GPS ในตัว

หากผู้ใช้วิ่งจ็อกกิ้งโดยสวมนาฬิกาที่ไม่มีเซ็นเซอร์ GPS ในตัวและไม่ได้นำโทรศัพท์ที่จับคู่ไว้ไปด้วย แอปนาฬิกาของคุณจะไม่สามารถรับข้อมูลตำแหน่งผ่านอุปกรณ์ที่เชื่อมต่อ ตรวจหาสถานการณ์นี้ในแอปและเตือนผู้ใช้ว่าความสามารถด้านตำแหน่งไม่พร้อมใช้งาน

หากต้องการตรวจสอบว่านาฬิกามีเซ็นเซอร์ GPS ในตัวหรือไม่ ให้เรียกใช้เมธอด hasSystemFeature() ด้วย PackageManager.FEATURE_LOCATION_GPS โค้ดต่อไปนี้จะตรวจหาว่า นาฬิกามีเซ็นเซอร์ GPS ในตัวหรือไม่เมื่อคุณเริ่มกิจกรรม

class LocationActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ...
    }
    fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
}

จัดการเหตุการณ์การยกเลิกการเชื่อมต่อ

หากนาฬิกาไม่มีเซ็นเซอร์ GPS ในตัวและขาดการเชื่อมต่อกับโทรศัพท์ นาฬิกาจะ สูญเสียสตรีมข้อมูลตำแหน่ง หากแอปของคุณคาดหวังว่าจะมีสตรีมข้อมูลอย่างต่อเนื่อง แอปของคุณต้องตรวจหาการขาดการเชื่อมต่อ เตือนผู้ใช้ และลด ฟังก์ชันการทำงานลงอย่างค่อยเป็นค่อยไป

เช่นเดียวกับอุปกรณ์เคลื่อนที่ เมื่อขอข้อมูลอัปเดตตำแหน่งโดยใช้ FusedLocationProviderClient.requestLocationUpdates() คุณจะส่งLocationCallback หรือ PendingIntent ทั้งสองอย่างนี้มีข้อมูลตำแหน่งและสถานะLocationAvailability

เมื่อใช้ตัวเลือก LocationCallback ให้ลบล้าง onLocationAvailability() เพื่อรับข้อมูลอัปเดตเกี่ยวกับสถานะความพร้อมใช้งานของตำแหน่ง

เมื่อใช้ตัวเลือก PendingIntent และระบบแสดงผล Intent ให้ดึงข้อมูลสถานะความพร้อมให้บริการของสถานที่จาก Intent โดยใช้วิธี LocationAvailability.extractLocationAvailability(Intent)

ไม่พบแฮนเดิล

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

ล้างตำแหน่งด้วยการเรียกแบบเป็นกลุ่ม

หากคุณใช้การเรียกแบบเป็นกลุ่ม ให้เรียก flushLocations() เมื่อหน้าจอกลับมาเปิดอีกครั้งหรือกลับจากโหมดแอมเบียนท์เพื่อส่งคืนตำแหน่งที่จัดกลุ่มไว้ทั้งหมดไปยัง LocationListeners, LocationCallbacks และ Pending Intents ที่ลงทะเบียนทั้งหมดทันที