【问题标题】:Various GPS Android Functionality Questions各种 GPS Android 功能问题
【发布时间】:2010-05-10 23:48:06
【问题描述】:

我对 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) 有没有办法在 GPS 监听器收到锁并更新 getLastKnownLocation 后“关闭”它?一旦我获得了锁,我认为没有必要让我的应用程序继续运行它..

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
        }

    }     

【问题讨论】:

    标签: android gps


    【解决方案1】:
    1. 第 4-5 行似乎对你没有好处。另外,LocationManager.GPS_PROVIDER"gps",所以请使用LocationManager.GPS_PROVIDER

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

    1. “有没有办法推迟最后一步(访问“getLastKnownLocation”,直到我确定我有 GPS 锁定?”——当然,不调用该方法。“如果这会发生什么被调用并且 GPS 仍在寻找信号?”——它返回 null

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

    3. 通过removeUpdates()注销您的LocationListener

    4. 是的,您的假设是正确的,至少对于“经常”的某些定义而言。

    5. 是的,您需要一个 LocationListener 实例才能使用 requestLocationUpdates()。更重要的是,当你第一次接到onLocationChanged() 的电话时,这意味着你得到了第一个修复。据推测,对于您似乎想要使用代码的方式,您将在此处处理修复,然后按照上面的 #4 删除 LocationListener

    【讨论】:

    • CommonWare - 再次感谢您的帖子。这对我有很大帮助。我仍然质疑的一项是您提到无法确保 GPS 有修复的地方。此外,在我的测试中,我注意到如果我们还没有修复,getLastKnownLocation() 不一定为 null - 例如,如果我获得修复,然后停止 GPS 服务,我相信 getLastKnownLocation() 仍然保留以前的位置。我将如何获取我的当前位置(或查看是否有一个可以告诉我是否有修复)?有什么想法吗?
    • “我将如何获取我的当前位置(或查看是否有一个可以告诉我是否有修复)?”致电requestLocationUpdates() 并使用您获得的第一个修复程序。或者,调用getLastKnownLocation(),如果它不为null,调用getTime() 并计算它的年龄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多