Android网络提供商和gps提供商处理

时间:2014-03-27 06:46:23

标签: android gps-time

我已经完成了这个代码,我要求更新位置。我想知道我是否正确实现了它。一旦页面打开,我请求更新(优先于网络通过gps)...然后我在功能onlocationchanged中显示位置。我想问一下是否有可能在内部onlocationchanged我得到位置null类似当我getlastknownlocation? 我停止使用ghetlastknownlocation,因为它返回nulll有时和错误的值。

      boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    boolean  isNetworkEnabled = lm
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    if (!isGPSEnabled && !isNetworkEnabled)
    {   
        ProgressBar progress = (ProgressBar)findViewById(R.id.progress);
        progress.setVisibility(View.INVISIBLE);
        Utilities.showAlertDialog2(RegionalStoresMeActivity.this, "", ""+getResources().getString(R.string.nothing_enabled), false);
    }
    else if(isNetworkEnabled){
        // lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);       
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);
    }
    else if(isGPSEnabled ) {                                                                                      
               lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1,0, this);
    } 

1 个答案:

答案 0 :(得分:0)

onLocationChanged()方法仅在具有适当纬度和经度的位置更新时被调用。它可能是零到最轻微的可能性,但我从来没有经历过它。

你做得不错,但我想提出一个建议。 考虑一个场景 -

已启用网络提供商,并且您已请求位置更新。但由于某种原因,它不会返回位置更新(在很多情况下,位置提供程序不会返回位置更新,也不是必须返回位置更新。)

现在根据你的代码,它不会检查GPS提供商cos的“else if(isGPSEnabled)”。所以我建议你只在下面的“if”语句中实现它

if( isNetworkEnabled )
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);

if( isGPSEnabled )                                                                                      
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1,0, this);