2011-10-06 66 views

回答

28

如何检查LocationManager.NETWORK_PROVIDER是否可用?

使用此部分检查网络提供商是否启用与否:

network_enabled=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

这将返回一个布尔值:

真正 - 如果启用。

false - 未启用。

额外的检查,如果GPS提供商启动:

gps_enabled=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

这将返回一个布尔值:

真正 - 如果启用。

false - 未启用。

如果你希望用户启用网络或GPS提供商使用此代码用户重定向到设置页面:

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); 
+0

“启用”一词似乎与w ord'available'在问题和你的答案之间。我也在寻找这个问题的解决方案,并不确定这个答案是否正在寻找。 – mr5

2

这里是使用网络供应商和/或GPS提供商获取位置代码

private Location getLocation() {    
     Location gpslocation = null; 
     Location networkLocation = null; 

     if(locMan==null){ 
      locMan = (LocationManager) getApplicationContext() .getSystemService(Context.LOCATION_SERVICE); 
     } 
     try { 
      if(locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
       locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000, 1, gpsListener); 
       gpslocation = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

      } 
      if(locMan.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
       locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 1, gpsListener); 
       networkLocation = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
      } 
     } catch (IllegalArgumentException e) { 
      //Log.e(ErrorCode.ILLEGALARGUMENTERROR, e.toString()); 
      Log.e("error", e.toString()); 
     } 
     if(gpslocation==null && networkLocation==null) 
      return null; 

     if(gpslocation!=null && networkLocation!=null){ 
      if(gpslocation.getTime() < networkLocation.getTime()){ 
       gpslocation = null; 
       return networkLocation; 
      }else{ 
       networkLocation = null; 
       return gpslocation; 
      } 
     } 
     if (gpslocation == null) { 
      return networkLocation; 
     } 
     if (networkLocation == null) { 
      return gpslocation; 
     } 
     return null; 
    } 

这里将检查GPS提供商是否能够那么如果还使用网络服务提供者得到的位置获得位置gpsLocation然后检查这是快的时间位置对象将返回

如果供应商之一,是使随后该位置的对象将被返回

3

因为在这里它总是有点奇怪; =)

我写一些自己的代码来检查网络供应商的可用性

把这个在你的onCreate()方法:

checkIfNetworkLocationAvailable(mContext_); 

别的地方在你的代码 =)

/** 
* checks if NETWORK LOCATION PROVIDER is available 
*/ 
private void checkIfNetworkLocationAvailable(Context context) { 

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    boolean networkLocationEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    if(!networkLocationEnabled){ 
     //show dialog to allow user to enable location settings 
     AlertDialog.Builder dialog = new AlertDialog.Builder(context); 
     dialog.setTitle(mContext_.getString(R.string.txtTip)); 
     dialog.setMessage(R.string.msgLocationServicesDisabled); 

     dialog.setPositiveButton(mContext_.getString(R.string.txtYes), new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); 
      } 
     }); 

     dialog.setNegativeButton(mContext_.getString(R.string.txtNo), new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       //nothing to do 
      } 
     }); 

     dialog.show(); 
    } 

} 

玩得开心,希望这可以帮助别人:) 正在寻找正是这段代码:=)

干杯:)