2012-03-07 96 views
0

在我的应用程序中,我想获取用户的位置并在地图上显示它(谷歌地图)。 在Android设备的设置,您可以检查Android谷歌地图使用GPS位置不是网络

  1. 使用无线网络
  2. 使用GPS卫星

当用户开始我显示至极一个对话框,用户可以选择获得mapactivity他现在的位置与否。

Old code deleted 

如果用户想要得到他的位置,我检查是否启用了gps。如果没有,我开始设置。否则,我尝试获取位置。但即使GPS处于活动状态并且“使用无线网络”,他也不会获得位置信息。是否有解决方案来检查是否启用了“使用无线网络”。或者我需要更改哪部分代码才能通过GPS信号获取位置?

感谢

编辑mycurrentcode:

boolean isGps = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
       boolean isNetwork = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

       if(!isGps && !isNetwork){ 
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        startActivity(intent); 
       } else if(isGps && !isNetwork) { 
        String bestProvider = LocationManager.GPS_PROVIDER; 
        Location location = lm.getLastKnownLocation(bestProvider); 


        Toast.makeText(MapsTabActivitiy.this, "Location niet beschikbaar.", Toast.LENGTH_SHORT).show(); 
       } else if(!isGps && isNetwork) { 
        String bestProvider = LocationManager.NETWORK_PROVIDER; 
        Location location = lm.getLastKnownLocation(bestProvider); 

        if(location == null){ 
         location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        } else if (location != null){ 
         mapcontroller.animateTo(new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6))); 
         mapcontroller.setZoom(15); 
        } 
       } 
       else { 
        Criteria criteria = new Criteria(); 
        criteria.setAccuracy(Criteria.ACCURACY_FINE); 
        String bestProvider = lm.getBestProvider(criteria, false); 
        Location location = lm.getLastKnownLocation(bestProvider); 

        if(location == null){ 
         location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        } else if (location != null){ 
         mapcontroller.animateTo(new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6))); 
         mapcontroller.setZoom(15); 
        } 
       } 

所以我isProviderEnabled检查GPS_PROVIDER和NETWORK_PROVIDER。并与如果,否则,如果我改变如何获得位置。我需要找到唯一的情况是案例2(否则,如果(是GPS & &!isNetwork){})。通过GPS信号获取位置。

回答

0

您正在使用Criteria类获得合适的提供商,但您可以使用LocationManager.GPS_PROVIDER简单地请求仅使用GPS的位置更新。更改

String bestProvider = lm.getBestProvider(criteria, false); 

String bestProvider = LocationManager.GPS_PROVIDER; 

希望这有助于。

+0

现在,即使当“使用无线网络”时,他也没有找到我的位置 – 2012-03-07 09:44:38

+0

@TimonDevos,并且“使用gps卫星”是否被检查? – Egor 2012-03-07 09:49:44

+0

但我希望设备在运行时选择至极位置更准确。如果我使用LocationManager.GPS_PROVIDER,那么设备不会选择?只有当NETWORK_PROVIDER未启用时,他需要从GPS_PROVIDER获取位置,反之亦然 – 2012-03-07 09:55:26