如何检查 LocationManager.NETWORK_PROVIDER 是不是可用?
Posted
技术标签:
【中文标题】如何检查 LocationManager.NETWORK_PROVIDER 是不是可用?【英文标题】:How to check if LocationManager.NETWORK_PROVIDER is available?如何检查 LocationManager.NETWORK_PROVIDER 是否可用? 【发布时间】:2011-12-02 03:42:15 【问题描述】:如何查看LocationManager.NETWORK_PROVIDER
是否可用?
我在androidManifest.xml
中启用了,但我需要在代码中检查它是否无法使用GPS_PROVIDER
。有人可以帮我吗?
【问题讨论】:
【参考方案1】:如何查看LocationManager.NETWORK_PROVIDER是否可用?
使用此部分检查 Network Provider 是否已启用:
network_enabled=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
这将返回一个 boolean 值:
true- 如果启用。
false - 未启用。
另外用于检查 GPS 提供商是否已启用:
gps_enabled=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
这将返回一个 boolean 值:
true- 如果启用。
false - 未启用。
如果您希望用户启用网络或 GPS 提供商,请使用此代码将用户重定向到设置页面:
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
【讨论】:
enable
这个词与问题和你的答案之间的 available
这个词似乎有歧义。我也在寻找这个问题的解决方案,但不确定这个答案是否是我正在寻找的。span>
【参考方案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();
玩得开心,希望这对某人有帮助:) 正在寻找那段代码:=)
干杯 :)
【讨论】:
以上是关于如何检查 LocationManager.NETWORK_PROVIDER 是不是可用?的主要内容,如果未能解决你的问题,请参考以下文章