GPS 나 인터넷을 사용하지 않고 사용자의 현재 위치를 알 수 있습니까? 모바일 네트워크 공급자의 도움으로 의미합니다.
GPS 나 인터넷을 사용하지 않고 사용자의 현재 위치를 알 수 있습니까? 모바일 네트워크 공급자의 도움으로 의미합니다.
답변:
당신이 찾고있는 것은 LocationManager.NETWORK_PROVIDER
대신을 사용하여 위치를 얻는 것입니다 LocationManager.GPS_PROVIDER
. NETWORK_PROVIDER
는 GSM 또는 와이파이에 의지 해결, 이제까지 가능합니다. 분명히 와이파이가 꺼지면 GSM이 사용됩니다. 셀 네트워크 사용은 기본적으로 500m까지 정확합니다.
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에 따르면 :
지정된 공급자로부터 얻은 마지막으로 알려진 위치 수정의 데이터를 나타내는 Location을 반환합니다. 이는 제공자를 시작하지 않고도 수행 할 수 있습니다.
다음은 빠른 스 니펫입니다.
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지도 위치 정보
이것은 간단한 RestApi입니다. POST 만 요청하면 서비스가 미터 단위의 정확도로 위치를 반환합니다.
GPS를 사용하지 않고도 스마트 폰 추적이 가능한 것으로 보인다.
출처 :
기본 : "PinMe : 전 세계 스마트 폰 사용자 추적"
2 차 : "GPS 또는 동의없이 휴대폰을 추적하는 방법"
아직 팀의 최종 코드에 대한 링크를 찾지 못했습니다. 내가 할 때 다른 사람이 게시하지 않은 경우 게시합니다.