【问题标题】:Time spent at a specific location using GPS sensor使用 GPS 传感器在特定位置花费的时间
【发布时间】:2019-05-22 20:29:12
【问题描述】:

我正在尝试实现一个功能来监控在特定位置花费的时间。

我已经实现了“requestLocationUpdates”函数,以使用 Google Maps API 接收有关当前用户位置的更新。

 public Location get_location(){
    if( is_walking ){
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
            Toast.makeText(context,"Permission not granted",Toast.LENGTH_SHORT).show();
            return null;
        }
        lm  = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean is_gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (is_gps_enabled){
           lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,15000,5,this);
            Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            return l;
        }else {
        }
        return null;
    }else

    return null;

我是否只是继续保存数组中的更新时间并将它们相互比较?那不是很消耗内存吗?

【问题讨论】:

    标签: java android gps location


    【解决方案1】:

    最简单的可能实现是将回调返回的初始位置保存在一个变量中。每当你得到一个新的,检查它有多远。如果距离大于 X,他已经移动了。比较两个事件的时间。这就是他在一个地方呆了多久。 X 至少应为 10m,因为 GPS 不够准确,无法在没有大量误报的情况下获得小于该值。

    这会给你一个答案。下一个级别是过滤掉误报。每隔一段时间,你就会得到一个非常奇怪的结果,这可能是一英里之外的一个很好的部分。你需要过滤掉那些。我会先做一些简单的事情,比如等到你在半径之外得到 4 或 5 个结果,然后假设他移动了。这也可以让您降低半径,因为您更远离噪音。

    当然,您还需要过滤掉非常短的停留时间,就好像您正在步行一样,您可能会看到多个读数显示您在同一个地方,因为您的步行速度并不那么快。最简单的方法是要求您在大致相同的地方有 N 个结果,然后再考虑自己在那里。

    这会让你开始。从那里,您需要查看数据错误的地方并提出自己的解决方案。

    【讨论】:

    • 感谢您的回复。听起来很简单。还有一个问题,我如何检查我是否有一个新变量?除非您的意思是我应该使用“ OnLocationChanged ”并将回调保存在链接列表中,然后将最后一个位置与前一个位置进行比较?对?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多