各种GPS Android功能问题

时间:2010-05-10 23:48:07

标签: android gps

我对Android和GPS上的LocationManager有一些问题(到目前为止)。请随意回答以下任何问题,我提前感谢您的帮助! (我注意到这些东西似乎没有很好地记录,所以希望这些问题也能帮助其他人!)

1)我使用以下代码,但我认为这里可能会有额外的毛病,我不需要。你能告诉我我是否可以删除这些内容吗?

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);       
LocationListener locationListener = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
LocationProvider locationProvider = lm.getProvider("gps");
Location currentLocation = lm.getLastKnownLocation(locationProvider.getName());

2)有没有办法推迟最后一步(访问“getLastKnownLocation”直到我确定我有GPS锁定?如果调用它并且GPS仍在寻找信号会怎么样?

3)最重要的是,我想确保在进入下一个方法之前有GPS锁定,那么有没有办法检查GPS是否锁定并且getLastKnownLocation是最新的?

4)有没有办法在收到锁定并更新getLastKnownLocation后“关闭”GPS监听器?一旦获得锁定,我认为不需要为我的应用程序保持运行..

5)你能否确认我的假设“getLastKnownLocation”在接收器移动时经常更新?

6)在我的代码中,我还有一个名为“ MyLocationListener ”的类(下面的代码),老实说,我刚刚从另一个例子中获取了..这实际上需要吗?我假设每当位置发生变化时,这都会更新我的位置管理器,但是肯定看不到课程本身有多大的内容!

private class MyLocationListener implements LocationListener 
    {
        @Override
        public void onLocationChanged(Location loc) {
            if (loc != null) {
                //Toast.makeText(getBaseContext(),   "Location changed : Lat: " + loc.getLatitude() + " Lng: " + loc.getLongitude(), Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String provider, int status, 
            Bundle extras) {
            // TODO Auto-generated method stub
        }

    }     

1 个答案:

答案 0 :(得分:4)

  1. 第4-5行似乎对你没有好处。此外,LocationManager.GPS_PROVIDER"gps",因此请使用LocationManager.GPS_PROVIDER

  2. 对于以下答案,我假设“GPS锁定”是指“GPS修复”。

    1. “有没有办法推迟最后一步(访问”getLastKnownLocation“直到我确定我有GPS锁定?” - 当然,不要调用方法。“如果这样做会怎么样被叫,GPS还在寻找信号?“ - 它返回null

    2. “最重要的是,我想确保在进入下一个方法之前有GPS锁定” - 这是不可能的。 “那么有没有办法检查GPS是否被锁定并且getLastKnownLocation是最新的?” - 如果getLastKnownLocation()返回null,则表示您没有修复。

    3. 通过LocationListener取消注册removeUpdates()

    4. 是的,您的假设是正确的,至少对于“频繁”的某些定义是正确的。

    5. 是的,您需要LocationListener个实例才能使用requestLocationUpdates()。更重要的是,当您第一次使用onLocationChanged()进行呼叫时,这意味着您获得了第一次修复。据推测,对于您似乎想要使用代码的方式,您可以在此处理修复,然后删除上面的#{1}}#。