2011-10-06 94 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(); 
    } 

} 

玩得開心,希望這可以幫助別人:) 正在尋找正是這段代碼:=)

乾杯:)