Android:获取用户的当前位置,而不使用GPS或互联网

是否有可能获得用户的当前位置,而不使用gpsinternet ? 我的意思是在移动networking提供商的帮助下。 任何人都可以帮我吗?

你要做的是使用LocationManager.NETWORK_PROVIDER而不是LocationManager.GPS_PROVIDERNETWORK_PROVIDER将解决在GSM或WiFi,这是可用的。 显然无线网关,GSM将被使用。 请记住,使用单元networking精确到基本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" /> 

在这里可以得到用户当前的位置,而不使用GPS和networking提供商。

1。 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2. 点击这里以供参考

 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; } } 

你看看Google Maps Geolocation Api吗? Google地图定位

这是简单的RestApi,你只需要POST请求,服务将以米为单位返回一个精确的位置

最好的问候

不,您目前无法使用GPS或互联网获取位置信息。

基于WiFi,蜂窝或蓝牙的定位技术在不断更新的大型数据库的帮助下工作。 设备扫描发射机ID,然后通过互联网将这些信息发送到诸如Google,Apple或Skyhook等服务。 该服务根据之前从已知地点进行的无线调查的位置作出响应。 没有互联网访问,你必须有一个这样的数据库的本地副本,并保持最新。 对于全球使用,这是非常不切实际的。

理论上,移动提供商只能提供本地数据服务,但不能访问互联网,然后应答来自移动设备的位置查询。 移动提供商不这样做; 没有人愿意为这种受限制的数据访问付费。 如果您通过移动提供商提供数据服务,则可以访问互联网。

总之,使用LocationManager.NETWORK_PROVIDER或android.hardware.location.network获取位置需要使用互联网。

使用最后一个已知的位置要求您最近有GPS或互联网访问。 如果你只是有互联网,大概你可以调整你的位置或设置,以再次获得互联网。 如果您的设备没有GPS或互联网接入,最后一个已知的位置function将无法帮助您。

没有GPS或互联网,你可以:

  1. 拍摄夜空的照片,并使用当前时间根据星图估算您的位置。 这可能需要额外的设备来确保正确测量照片的angular度。
  2. 使用加速计从一个已知位置开始跟踪位置。 在这种方法中积累的错误使得在大多数情况下不切实际。