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

时间:2011-10-06 10:34:41

标签: android android-location

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

我在AndroidManifest.xml启用了,但我需要在代码中检查一下,如果无法使用GPS_PROVIDER。有人能帮助我吗?

3 个答案:

答案 0 :(得分:29)

  

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

使用此部件检查网络提供商是否已启用:

network_enabled=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

这将返回布尔值值:

true - 如果已启用。

false - 未启用。

另外用于检查GPS提供商是否启用:

gps_enabled=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

这将返回布尔值值:

true - 如果已启用。

false - 未启用。

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

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

答案 1 :(得分: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();
    }

}

玩得开心,希望这有助于某人:) 正在寻找那段代码:=)

干杯:)

答案 2 :(得分: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如果还使用网络提供商获取位置然后检查位置对象将返回的快速时间

如果其中一个提供程序已启用,则该位置对象将返回