เป็นไปได้ไหมที่จะรับตำแหน่งปัจจุบันของผู้ใช้โดยไม่ต้องใช้ GPS หรืออินเทอร์เน็ต? ฉันหมายถึงด้วยความช่วยเหลือของผู้ให้บริการเครือข่ายมือถือ
เป็นไปได้ไหมที่จะรับตำแหน่งปัจจุบันของผู้ใช้โดยไม่ต้องใช้ GPS หรืออินเทอร์เน็ต? ฉันหมายถึงด้วยความช่วยเหลือของผู้ให้บริการเครือข่ายมือถือ
คำตอบ:
สิ่งที่คุณต้องการทำคือรับตำแหน่งโดยใช้LocationManager.NETWORK_PROVIDER
แทนLocationManager.GPS_PROVIDER
. NETWORK_PROVIDER
จะแก้ไขในระบบ GSM หรือ WiFi ซึ่งเคยใช้ได้ เห็นได้ชัดว่าเมื่อปิด wifi แล้ว GSM จะถูกใช้ โปรดทราบว่าการใช้เครือข่ายเซลล์นั้นมีความแม่นยำถึง 500 เมตร
http://developer.android.com/guide/topics/location/obtaining-user-location.htmlมีข้อมูลที่ยอดเยี่ยมและโค้ดตัวอย่าง
หลังจากคุณทำโค้ดส่วนใหญ่เสร็จแล้วOnCreate()
ให้เพิ่มสิ่งนี้:
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
คุณยังสามารถให้กิจกรรมของคุณนำไปใช้ในLocationListener
ชั้นเรียนและนำไปใช้onLocationChanged()
ในกิจกรรมของคุณได้
โดยรับไฟล์ getLastKnownLocation
คุณไม่จริงเริ่มต้นการแก้ไขตัวเอง
โปรดทราบว่าสิ่งนี้สามารถทำได้เริ่มต้นผู้ให้บริการ แต่ถ้าผู้ใช้เคยได้รับตำแหน่งมาก่อนฉันไม่คิดว่าจะเป็นเช่นนั้น เอกสารยังไม่ชัดเจนในเรื่องนี้มากนัก
ตามเอกสาร getLastKnownLocation:
ส่งคืนตำแหน่งที่ระบุข้อมูลจากการแก้ไขตำแหน่งที่ทราบล่าสุดที่ได้รับจากผู้ให้บริการที่ระบุ ซึ่งสามารถทำได้โดยไม่ต้องเริ่มต้นผู้ให้บริการ
นี่คือตัวอย่างสั้น ๆ :
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
คุณต้องเพิ่มสิทธิ์ใหม่ใน AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, และNETWORK_PROVIDER
GPS_PROVIDER
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
ไม่ปัจจุบันคุณไม่สามารถรับตำแหน่งได้โดยไม่ต้องใช้ GPS หรืออินเทอร์เน็ต
เทคนิคการระบุตำแหน่งตาม WiFi, Cellular หรือ Bluetooth ทำงานโดยใช้ฐานข้อมูลขนาดใหญ่ที่มีการอัปเดตอยู่ตลอดเวลา อุปกรณ์จะสแกนหา ID เครื่องส่งสัญญาณแล้วส่งสิ่งเหล่านี้ในแบบสอบถามผ่านอินเทอร์เน็ตไปยังบริการเช่น Google, Apple หรือ Skyhook บริการนั้นตอบสนองด้วยตำแหน่งตามการสำรวจไร้สายก่อนหน้านี้จากสถานที่ที่รู้จัก หากไม่มีอินเทอร์เน็ตคุณจะต้องมีสำเนาของฐานข้อมูลดังกล่าวในเครื่องและอัปเดตอยู่เสมอ สำหรับการใช้งานทั่วโลกสิ่งนี้ไม่สามารถใช้งานได้จริง
ในทางทฤษฎีผู้ให้บริการโทรศัพท์มือถือสามารถให้บริการข้อมูลในพื้นที่เท่านั้น แต่ไม่มีการเข้าถึงอินเทอร์เน็ตจากนั้นตอบคำถามเกี่ยวกับตำแหน่งจากอุปกรณ์มือถือ ผู้ให้บริการมือถือไม่ทำเช่นนี้ ไม่มีใครต้องการจ่ายสำหรับการเข้าถึงข้อมูลที่ถูก จำกัด ประเภทนี้ หากคุณมีบริการข้อมูลผ่านผู้ให้บริการมือถือของคุณแสดงว่าคุณสามารถเข้าถึงอินเทอร์เน็ตได้
กล่าวโดยย่อคือการใช้ LocationManager.NETWORK_PROVIDER หรือ android.hardware.location.network เพื่อรับตำแหน่งต้องใช้อินเทอร์เน็ต
การใช้ตำแหน่งที่ทราบล่าสุดทำให้คุณต้องมี GPS หรืออินเทอร์เน็ตเมื่อเร็ว ๆ นี้ หากคุณเพิ่งมีอินเทอร์เน็ตคุณสามารถปรับตำแหน่งหรือการตั้งค่าเพื่อรับอินเทอร์เน็ตได้อีกครั้ง หากอุปกรณ์ของคุณไม่มี GPS หรืออินเทอร์เน็ตคุณสมบัติตำแหน่งสุดท้ายที่ทราบจะไม่ช่วยคุณ
หากไม่มี GPS หรืออินเทอร์เน็ตคุณสามารถ:
สามารถรับตำแหน่งปัจจุบันของผู้ใช้ได้ที่นี่โดยไม่ต้องใช้ GPS และผู้ให้บริการเครือข่าย
1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
ลองดู Google Maps Geolocation Api หรือยัง Google Map Geolocation
นี่คือ RestApi ที่เรียบง่ายคุณเพียงแค่ต้องโพสต์คำขอบริการจะส่งคืนตำแหน่งด้วยความแม่นยำเป็นเมตร
ปรากฏว่าสามารถติดตามสมาร์ทโฟนได้โดยไม่ต้องใช้ GPS
แหล่งที่มา:
หลัก: "PinMe: ติดตามผู้ใช้สมาร์ทโฟนทั่วโลก"
รอง: "วิธีติดตามโทรศัพท์มือถือโดยไม่ใช้ GPS หรือความยินยอม"
ฉันยังไม่พบลิงก์ไปยังรหัสสุดท้ายของทีม ฉันจะโพสต์เมื่อใดหากยังไม่ได้ดำเนินการ