【问题标题】:Android locationClient returning null, location updates non-responsiveAndroid locationClient返回null,位置更新无响应
【发布时间】:2013-07-17 20:25:20
【问题描述】:

这是我连接 locationClient 后调用的 onConnected() 方法。此方法称为 ok,因此 GPS 连接正常。但是,getLastLocation() 返回 null,这可能是由于尝试过早获取位置而可以预期的,并且根本没有调用 locationListener 方法。 它在三星 Galaxy S3 上运行。当我打开谷歌地图应用程序时,它会立即确定我的位置,所以 GPS 一定没问题。

@Override
public void onConnected(Bundle arg0) 
{

    Toast.makeText(context, "GPS connected", Toast.LENGTH_SHORT).show();
    connector = new Connector();
    connector.execute("clues", null, null);
    listener = new LocationListener()
    {
        @Override
        public void onLocationChanged(Location location) 
        {
            Log.d("location", "listener activated");
            try
            {
            coords = locationCoords(location);
            if(coords[0] != 0)
            {
                meMarker = map.addMarker(new MarkerOptions()
                .position(new LatLng(coords[0], coords[1]))
                .title("Me")
                .snippet("Your position")
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));   
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(coords[0], coords[1]), (float) 19));
            }
            Toast.makeText(context, coords[0] + ", " + coords[1], Toast.LENGTH_LONG).show();
            }
            catch(NullPointerException e)
            {
                Log.d("nulls", "null");
            }

        }
    };
    mLocationClient.requestLocationUpdates(mLocationRequest, listener);
    try
    {
    coords = locationCoords(new Location(mLocationClient.getLastLocation()));
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(coords[0], coords[1]), (float) 19));
    }
    catch(NullPointerException e)
    {
        Toast.makeText(context,"location null", Toast.LENGTH_LONG).show();
    }
    //Toast.makeText(context, coords[0] + ", " + coords[1], Toast.LENGTH_LONG).show();
    Log.d("location", "location updates initiated");
}

定义请求参数:

public dbConnector(Context con, Activity acti, GoogleMap map)
{
    context = con;
    activity = acti;
    mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    setGPSUpdates(10000, 5000);
    mLocationRequest.setInterval(updateRate);
    mLocationRequest.setFastestInterval(fastestUpdate);
    mLocationRequest.setSmallestDisplacement(1);
    Log.d("location", "location request constructed");
    this.map = map;


}

public void setGPSUpdates(int update, int fastupdate)
{
    updateRate = update;
    fastestUpdate = fastupdate;
}

【问题讨论】:

  • 在请求位置更新之前设置优先级和最快间隔。我不明白你在哪里这样做

标签: android gps locationlistener


【解决方案1】:

Google 地图应用同时使用 GPS 和网络定位。

使用 GPS 时,第一个修复需要一些时间到达是正常的。此外,它在外面工作得很好,在里面却很糟糕。 (另外,请确保 GPS 已启用)

此代码适用于我:

public class MainActivity extends Activity implements LocationListener {

    private LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            // GPS is disabled
        }

    }

    @Override
    protected void onStart() {
        super.onStart();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, this);
    }

    @Override
    protected void onStop() {
        locationManager.removeUpdates(this);
        super.onStop();
    }

    @Override
    public void onLocationChanged(Location location) {
        // do something with the fix
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }
}

【讨论】:

  • 等了 10 分钟,没有修复。出去了,没修。打开谷歌地图,即时修复。问题不在于 GPS 本身,一定有问题……
  • 我正在使用谷歌 API。它实际上在 5 天前工作,然后有一天它决定停止工作。我可能会尝试切换到更传统的定位服务系统。
  • @fonduman 在这 5 天里你有什么改变?如果您没有更改任何内容,那么您的代码可能没有任何问题。您是否尝试重新启动设备?
  • 我在 GPS 停止工作之前定义了地图标记并将其放入侦听器中。重启设备,没有变化。
猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多