ผู้ให้บริการตำแหน่ง Android - GPS หรือผู้ให้บริการเครือข่าย?


128

ในแอปพลิเคชันของฉันฉันต้องการระบุตำแหน่งปัจจุบันของผู้ใช้ อย่างไรก็ตามฉันมีคำถามสองสามข้อในเรื่องนี้:

  1. มีผู้ให้บริการตำแหน่งที่แตกต่างกันข้อใดถูกต้องที่สุด ผู้ให้บริการ GPSหรือผู้ให้บริการเครือข่าย ?

  2. ผู้ให้บริการที่มีอยู่แตกต่างกันแค่ไหน? พวกเขาทำงานอย่างไร?

  3. โปรดให้ข้อมูลโค้ดหรือแบบฝึกหัดเกี่ยวกับวิธีเริ่มต้นใช้งานฟังก์ชัน GPS ในแอปพลิเคชันของฉันได้ไหม


18
โหวตให้เปิดอีกครั้ง - คำถามดี & คำตอบมีประโยชน์ คำตอบยังล้าสมัยเนื่องจากขณะนี้มี Fused Location Provider - การเปิดคำถามจะทำให้สามารถอัปเดตได้
Richard Le Mesurier

คำตอบ:


281

มีผู้ให้บริการตำแหน่ง 3 รายใน Android

พวกเขาเป็น:

gps -> (GPS, AGPS):ชื่อผู้ให้บริการตำแหน่ง GPS ผู้ให้บริการนี้กำหนดตำแหน่งโดยใช้ดาวเทียม ผู้ให้บริการรายนี้อาจใช้เวลาสักครู่ในการส่งคืนการแก้ไขตำแหน่งทั้งนี้ขึ้นอยู่กับเงื่อนไข ต้องได้รับอนุญาต android.permission.ACCESS_FINE_LOCATION

เครือข่าย -> (AGPS, CellID, WiFi MACID):ชื่อของผู้ให้บริการตำแหน่งเครือข่าย ผู้ให้บริการรายนี้กำหนดตำแหน่งตามความพร้อมของเสาสัญญาณและจุดเชื่อมต่อ WiFi ผลลัพธ์จะถูกเรียกโดยการค้นหาเครือข่าย ต้องการสิทธิ์อย่างใดอย่างหนึ่ง android.permission.ACCESS_COARSE_LOCATION หรือ android.permission.ACCESS_FINE_LOCATION

passive -> (CellID, WiFi MACID):ผู้ให้บริการตำแหน่งพิเศษสำหรับการรับตำแหน่งโดยไม่ต้องเริ่มการแก้ไขตำแหน่ง ผู้ให้บริการรายนี้สามารถใช้เพื่อรับการอัปเดตตำแหน่งโดยไม่ได้ตั้งใจเมื่อแอปพลิเคชันหรือบริการอื่นร้องขอโดยไม่ต้องร้องขอตำแหน่งด้วยตัวเอง ผู้ให้บริการรายนี้จะส่งคืนตำแหน่งที่สร้างโดยผู้ให้บริการรายอื่น ต้องได้รับอนุญาต android.permission.ACCESS_FINE_LOCATION แม้ว่าหากไม่ได้เปิดใช้งาน GPS ผู้ให้บริการรายนี้อาจส่งคืนการแก้ไขที่หยาบเท่านั้น นี่คือสิ่งที่ Android เรียกผู้ให้บริการตำแหน่งเหล่านี้อย่างไรก็ตามเทคโนโลยีพื้นฐานในการทำให้สิ่งนี้ทำงานได้ถูกจับคู่กับชุดฮาร์ดแวร์เฉพาะและความสามารถที่ Telco จัดเตรียมไว้ให้ (บริการเครือข่าย)

วิธีที่ดีที่สุดคือใช้ผู้ให้บริการ "เครือข่าย" หรือ "พาสซีฟ" ก่อนจากนั้นจึงใช้ "gps" สลับไปมาและขึ้นอยู่กับงาน ซึ่งครอบคลุมทุกกรณีและให้บริการตัวหารร่วมที่ต่ำที่สุด (ในกรณีที่เลวร้ายที่สุด) และบริการที่ดีเยี่ยม (ในกรณีที่ดีที่สุด)

ป้อนคำอธิบายภาพที่นี่

การอ้างอิงบทความ: ผู้ให้บริการตำแหน่ง Android - gps, เครือข่าย, passive โดย Nazmul Idris

รหัสอ้างอิง: https://stackoverflow.com/a/3145655/28557

----------------------- ปรับปรุง -----------------------

ตอนนี้ Android มีผู้ให้บริการตำแหน่งแบบ Fused

Fused Location Provider จัดการเทคโนโลยีระบุตำแหน่งอย่างชาญฉลาดและมอบตำแหน่งที่ดีที่สุดตามความต้องการของคุณ ช่วยให้แอปได้รับตำแหน่งปัจจุบันของผู้ใช้ง่ายขึ้นด้วยความแม่นยำที่ดีขึ้นและลดการใช้พลังงาน

ผู้ให้บริการตำแหน่งแบบผสมผสานมีสามวิธีในการดึงข้อมูลตำแหน่ง

  1. ตำแหน่งสุดท้าย:ใช้เมื่อคุณต้องการทราบตำแหน่งปัจจุบันหนึ่งครั้ง
  2. ขอตำแหน่งโดยใช้ Listener:ใช้เมื่อแอปพลิเคชันอยู่บนหน้าจอ / ส่วนหน้าและต้องการตำแหน่งต่อ
  3. ขอตำแหน่งโดยใช้ความตั้งใจที่รอดำเนินการ:ใช้เมื่อแอปพลิเคชันอยู่เบื้องหลังและต้องการตำแหน่งต่อไป

อ้างอิง:

เว็บไซต์อย่างเป็นทางการ: http://developer.android.com/google/play-services/location.html

ตัวอย่างผู้ให้บริการตำแหน่งแบบผสมผสาน: GIT: https://github.com/kpbird/fused-location-provider-example

http://blog.lemberg.co.uk/fused-location-provider

-------------------------------------------------- ------


2
โปรดทราบว่ายังมีผู้ให้บริการ Google Play Services Fused Locator ที่สามารถใช้ได้
Richard Le Mesurier

เป็นไปได้ไหมที่จะสร้างผู้ให้บริการตำแหน่งของคุณเอง android.permission.INSTALL_LOCATION_PROVIDER ได้รับการลงนามหรือระบบหมายความว่าฉันควรจะสามารถติดตั้งบนอุปกรณ์ที่รูทได้ใช่ไหม
JohnyTex

1
ผู้ให้บริการตำแหน่งแบบ Fused ใช้ได้เฉพาะกับ API> = 19 เราจำเป็นต้องทำตามขั้นตอนเดิมสำหรับอุปกรณ์ที่ใช้เวอร์ชันเก่าใช่ไหม
Shobhit Puri

มีโค้ดตัวอย่าง / API ที่มีอยู่ซึ่งค้นหาตำแหน่ง GPS และถอยกลับไปยังผู้ให้บริการเครือข่ายหลังจากผ่านไประยะหนึ่งหรือไม่หาก GPS ไม่สามารถดึงข้อมูลตำแหน่งได้ หรือควรจัดการโค้ดด้วยตรรกะตัวจับเวลาบางอย่าง?
jrhamza

ผู้ให้บริการแบบ Passive "" "ผู้ให้บริการรายนี้สามารถใช้เพื่อรับการอัปเดตตำแหน่งโดยไม่ได้ตั้งใจเมื่อแอปพลิเคชันหรือบริการอื่นร้องขอโดยไม่ต้องร้องขอตำแหน่งด้วยตัวคุณเอง" ""
nurisezgin

7

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

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

http://developer.android.com/guide/topics/location/obtaining-user-location.html


@Noman คุณต้องการรับลองจิจูดและละติจูดที่ตั้งของคุณหรือไม่?
Nikunj Patel

@Scorpio จริง ๆ แล้วฉันอยากรู้ว่าตัวเลือกใดดีกว่ากันระหว่างผู้ให้บริการเครือข่ายและผู้ให้บริการ GPS . .Otra ส่งลิงค์มาให้ฉันเพื่อเป็นคำตอบสำหรับคำถามของฉันที่ ahs ช่วยฉันได้มาก ... ตอนนี้ฉันใช้ NETWORK PROVIDER ในแอพของฉัน :-)
Noman

3

มีบางคำตอบที่ดีที่กล่าวถึงที่นี่ อีกวิธีหนึ่งที่คุณสามารถทำได้คือใช้ SDK ฟรีที่มีอยู่ทางออนไลน์เช่น Atooma, tranql และ Neura ซึ่งสามารถรวมเข้ากับแอปพลิเคชัน Android ของคุณได้ (ใช้เวลาในการรวมไม่ถึง 20 นาที) นอกเหนือจากการให้ตำแหน่งที่ถูกต้องของผู้ใช้แล้วยังสามารถให้ข้อมูลเชิงลึกที่ดีเกี่ยวกับกิจกรรมของผู้ใช้ของคุณได้อีกด้วย นอกจากนี้บางส่วนใช้พลังงานแบตเตอรี่น้อยกว่า 1%


1
ขอข้อมูลอ้างอิงถึง sdk ที่คุณพูดถึงได้ไหม
Kishore Relangi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.