【问题标题】:Android - get location after some timeAndroid - 一段时间后获取位置
【发布时间】:2015-10-08 11:45:20
【问题描述】:

我可以使用 LocationManager 获取 minDistance 和 minTime 的位置。

但是,例如,如何每 15 秒获取一次位置? (即使用户没有移动)

        if (Utils.hasProvider(LocationManager.GPS_PROVIDER)) {
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 15000, 100f, this);
        }

        if (Utils.hasProvider(LocationManager.NETWORK_PROVIDER)) {
            mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 15000, 100f, this);
        }

【问题讨论】:

    标签: java android gps location


    【解决方案1】:

    Google 文档这么说

    minDistance参数也可以用来控制频率 位置更新。如果它大于 0,那么位置提供者 仅当位置有更新时才会向您的应用程序发送更新 至少改变了 minDistance 米和至少 minTime 毫秒过去了。不过定位比较难 提供商使用 minDistance 参数来节省电量,因此 minTime 应该是节省电池寿命的主要工具。

    因此有一个 AND 条件。因此,您应该将距离参数设置为 0。在这种情况下,您将每 15 秒更新一次位置。

    【讨论】:

    • 嗯...这很奇怪。当我将距离参数设置为 0 和任何 minTime(5000、10000、20000)时,我每秒都会获得位置(用户当时正在移动)
    • 您如何验证持续时间为 1 秒?
    • 在日志中。我每 1 秒看到一次更新,但我在 minTime 中设置了 15000,例如
    【解决方案2】:

    使用 AlarmManager 来执行此操作。请参阅此answer。将时间替换为 5 分钟。

    否则,你可以使用

             Runnable runnable = new Runnable() {
    
             public void run() 
                    {
                        //Your code to fetch location
                    }
                };
    
                Handler handler1 = new Handler();
                handler1.postDelayed(runnable, 15000);
    

    这里 15000 是 15 秒。

    【讨论】:

    • alarmManager 会像你说的那样在最短 5 分钟的时间内拨打电话,但用户希望每 15 秒一次。
    • 他可以随意更改时间。查看更新后的代码
    • Android 允许的最小值为 5 分钟。如果你放的少那么它会显示一个警告。
    • 如果是Service类呢?
    【解决方案3】:

    您可以使用 IntentService 和 onstartcommand 调用 runnable 来发布您的位置,像这样

       Handler handler.postDelayed(postGpsRunnable, 15000);
    

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 2017-02-20
      • 2021-01-17
      • 1970-01-01
      • 2016-03-18
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多