我想在数据库中保存用户在行走过程中在一个地方呆了多长时间。
有什么想法吗?
我已经实现了“ 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;
答案 0 :(得分:1)
最简单的实现是将回调返回的初始位置保存在变量中。每当您得到一个新的时,请检查它有多远。如果距离大于X,则表示已移动。比较两个事件的时间。那就是他在一个地方呆了多久。 X应该至少为10m,因为GPS的准确度不足以得到足够的误差而没有很多误报。
那会给你答案。下一阶段是过滤掉误报。每隔一段时间,您会得到一个非常奇怪的结果,可能相差一英里。您需要将它们过滤掉。我将从做一些简单的事情开始,例如等到半径范围外获得4或5个结果,然后假设他已移动。这样一来,您也可以降低半径,因为您与噪声之间的距离更加孤立。
当然,您还需要过滤掉很短的停留时间,好像您在走路时可能会在同一位置看到多个读数,因为您走得并不快。最简单的方法是要求您在大致相同的位置获得N个结果,然后再考虑自己在那里。
这会让您入门。从那里,您需要查看数据错误的地方并提出自己的解决方案。