Pra*_*u M 89 gps android geolocation android-gps
是否可以在不使用GPS或互联网的情况下获取用户的当前位置?我的意思是在移动网络提供商的帮助下.
Ian*_*Ian 85
你要做的是使用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);
Run Code Online (Sandbox Code Playgroud)
您还可以让您的活动实现LocationListener该类,从而onLocationChanged()在您的活动中实施.
hwr*_*kns 15
通过获得getLastKnownLocation你自己实际上没有启动修复.
请注意,这可能会启动提供程序,但如果用户以前曾获得过某个位置,我认为不会.文档在这方面并不是很清楚.
根据docs 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;
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须添加新权限 AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
不可以,目前您无法在不使用 GPS 或互联网的情况下获取位置。
基于 WiFi、蜂窝或蓝牙的定位技术需要不断更新的大型数据库的帮助。设备扫描发射器 ID,然后通过互联网将这些查询发送到 Google、Apple 或 Skyhook 等服务。该服务根据先前从已知位置进行的无线调查来响应位置。如果无法访问互联网,您必须拥有此类数据库的本地副本并保持最新。对于全球使用来说,这是非常不切实际的。
理论上,移动提供商可以只提供本地数据服务,但不能访问互联网,然后回答来自移动设备的位置查询。移动提供商不会这样做;没有人愿意为这种受限的数据访问付费。如果您通过移动提供商获得数据服务,那么您就可以访问互联网。
简而言之,使用 LocationManager.NETWORK_PROVIDER 或 android.hardware.location.network 获取位置需要使用互联网。
使用最后已知位置需要您最近拥有 GPS 或互联网访问权限。如果您刚刚有互联网,想必您可以调整您的位置或设置以再次上网。如果您的设备没有 GPS 或互联网接入,则最后已知位置功能将无法为您提供帮助。
没有 GPS 或互联网,您可以:
| 归档时间: |
|
| 查看次数: |
137364 次 |
| 最近记录: |