【发布时间】:2014-06-27 18:11:35
【问题描述】:
我正在尝试通过网络提供商而不是 gps 提供商获取我当前的坐标。
我能够找到解决方案,但我对这种情况下的概念有点困惑。
工作代码
这是获取坐标的代码:
public void getLocation(){
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
if(appUtils.isOnline()){
try{
Geocoder geocoder = new Geocoder(
MainActivity.this.getApplicationContext(),
Locale.getDefault());
Location locationNetwork = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
List<Address> list;
if(locationNetwork!=null){
Toast.makeText(context,"Network Available!!",Toast.LENGTH_LONG).show();
list = geocoder.getFromLocation(locationNetwork.getLatitude(),locationNetwork.getLongitude(),3);
if(list!=null&&list.size()>0){
latitude = list.get(0).getLatitude();
longitude = list.get(0).getLongitude();
Toast.makeText(context,String.valueOf(latitude) + " (....) " + String.valueOf(longitude),Toast.LENGTH_LONG).show();
int count = 0;
while (latitude==null||longitude==null){
latitude = list.get(count).getLatitude();
longitude = list.get(count).getLongitude();
count++;
Toast.makeText(context,String.valueOf(latitude) + " --- " + String.valueOf(longitude),Toast.LENGTH_LONG).show();
}
}
}else{
Toast.makeText(context,"No response!!",Toast.LENGTH_LONG).show();
}
}catch (IOException e){
e.printStackTrace();
}
}else{
Toast.makeText(context,"Server not responding",Toast.LENGTH_LONG).show();
}
}
启用 gps 后,这段代码运行良好。如果 gps 被禁用,它就不起作用。
现在,如果我们将位置设置为 NETWORK_PROVIDER:
Location locationNetwork = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
为什么我们仍然需要 gps ?
现在,如果我将其更改为 PASSIVE PROVIDER:
Location locationNetwork = locationManager
.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
它适用于被动提供者。为什么会这样?
有人可以解释这里的主要区别是什么,以及与网络提供商获取坐标的正确方法是什么?
我知道这个问题被问了好几次,我确实经历过。我只是想弄清楚这个概念。
提前谢谢.. :)
【问题讨论】:
标签: android gps locationmanager android-location