在我获得gps /网络位置后,android删除位置

时间:2016-07-23 15:24:37

标签: android

我试图获得该位置的价值。 我调试代码,我看到,在我得到位置后 - android studio没有将值返回到主要活动

我看到代码上没有异常。

方法'getCurrentLocation'返回位置。 从gps / network获取位置后(在调试查看器的正确位置),我看到代码就行了

    'if (!isGpsEnable && !isNetworkEnable) {' 

并在'location'上返回null 变量即使'location'变量包含正确的gps位置。

代码:

  public class TraceLocation implements LocationListener
 {
public Location getCurrentLocation(Context context)
{
    Location location = null;

    try {

        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

        Boolean isGpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        Boolean isNetworkEnable = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGpsEnable && !isNetworkEnable) {
            // TODO !!! => no gps and no network !!!
        } else if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            if (isNetworkEnable) {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 10, this);

                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                }
            }

            if (isGpsEnable) {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);

                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                }
            }
        }
    }
    catch(Exception e)
    {

    }


    return location;
}

问题:

  • 我使用的是android 6.0(marshmallow)

    1. 为什么当方法返回时我的结果为null,即使我看到调试的返回值不为null

    2. 当我删除

      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,60000,10,this);

     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);

我也没有得到调试的位置 - 为什么?????

1 个答案:

答案 0 :(得分:1)

根据您提供的说明,我觉得您还没有完全实现原生Android位置机制所需的功能。 Android中的位置提供程序以异步方式工作,因此您必须注册一个侦听器,该侦听器将在生成位置更新时得到通知。 您无法期望系统立即响应(除非您使用getLastKnownLocation(String provider)方法here)。

您的课程包含implements LocationListener,这应该强制您实施一系列方法,包括onLocationChanged(Location location)。 这种方法是在获得位置时将被触发的方法;您可以检查location对象以查看其来源(无线或GPS)和其他数据(速度,准确度等)。

查看官方指南以了解更多详情here。 由于您的调试操作是处理从环境(GPS和无线网络)收集的数据,因此系统的行为将取决于这些变量。