2013.09.04——— android Location 过滤最佳的位置
参考:
http://lszdb1983.blog.163.com/blog/static/2042634820126221635756/
下面是验证位置修正可以采用的步骤:
检查是否最近得到的位置信息明显比以前的要新。
检查位置精度是好于还是差于之前的。
检查最新的位置信息是来自于哪一个Provider(提供者),并且判断是否这个位置信息相比之前的更加准确可靠。
下面是一个符合上述逻辑的例子:
private static final int TWO_MINUTES = 1000 * 60 * 2;
/** 判断哪一种位置读取方式比当前的位置修复更加的准确
* @param location 新位置
* @param currentBestLocation 当前的位置,此位置需要和新位置进行比较
*/
protected boolean isBetterLocation(Location location, Location currentBestLocation) {
if (currentBestLocation == null) {
// A new location is always better than no location
return true;
}
//检查最新的位置是比较新还是比较旧
long timeDelta = location.getTime() - currentBestLocation.getTime();
boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
boolean isNewer = timeDelta > 0;
//如果当前的位置信息来源于两分钟前,使用最新位置,
// 因为用户可能移动了
if (isSignificantlyNewer) {
return true;
//如果最新的位置也来源于两分钟前,那么此位置会更加的不准确。
} else if (isSignificantlyOlder) {
return false;
}
//检查最新的位置信息是更加的准确还是不准确
int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
boolean isLessAccurate = accuracyDelta > 0;
boolean isMoreAccurate = accuracyDelta < 0;
boolean isSignificantlyLessAccurate = accuracyDelta > 200;
//检查旧的位置和新的位置是否来自同一个provider
boolean isFromSameProvider = isSameProvider(location.getProvider(),
currentBestLocation.getProvider());
//结合及时性和精确度,决定位置信息的质量
if (isMoreAccurate) {
return true;
} else if (isNewer && !isLessAccurate) {
return true;
} else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) {
return true;
}
return false;
}
/*** 检查两个提供者是否是同一个*/
private boolean isSameProvider(String provider1, String provider2) {
if (provider1 == null) {
return provider2 == null;
}
return provider1.equals(provider2);
}
分享到:
相关推荐
基于因子分析的我国A股上市...争力评价——以医药企业为例_张澳.caj
微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip ...
数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip数据库大作业——学校人事信息管理系统.zip...
发福利了,Aspose Total for NET 2013.09.10 最新破解,danny_su 大作,花了10个贡献分才下载的了!现免费提供大家:) This package contains the following .NET Components: - Aspose.BarCode for .NET v5.7.0.0 ...
python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目——Word助手.zip python项目...
python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ读者书库.zip python项目——RCQ...
C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统....
EDA_BOMHelper V2013.10.10原版软件,可以用和谐补丁。支持32位系统。
Geomagic.Studio.2012软件,由于太大,分成八个压缩包以及一个其他文件包。 此文件为part5
实用源码——Android屏幕锁源码.zip 实用源码——Android屏幕锁源码.zip 实用源码——Android屏幕锁源码.zip 实用源码——Android屏幕锁源码.zip 实用源码——Android屏幕锁源码.zip
matlab课程设计——调幅广播系统的仿真设计 完整版.docxmatlab课程设计——调幅广播系统的仿真设计 完整版.docxmatlab课程设计——调幅广播系统的仿真设计 完整版.docxmatlab课程设计——调幅广播系统的仿真设计 ...
Now.getUTCFullYear() ——使用世界标准时间获取当前日期对象“年份”部分四位数值。 Now.getMonth() ——获取日期对象“月份”部分的数值(1 ~ 12)。 Now.getDate() ——获取日期对象返回一个月中的日期的数字(1 ~...
有偏技术进步、要素配置扭曲...发展——基于技术一致性视角_蔺鹏 (1).caj
基于FLO-2D的泥石流灾...评价——以麦多沟泥石流为例_李宝幸.caj
Android中文翻译组——Android中文API合集(4).chm
分享的图书,有关Java SE 7 SDK标准的书,全英文。相应章节: Chapter 1. Introducing the Basics of Java Chapter 2. Applying Data Types in Java Programming Chapter 3....Chapter 4....Chapter 5....
录音软件MP3——Cooolsoft MP3 Sound Recorder2.88汉化版.exe录音软件MP3——Cooolsoft MP3 Sound Recorder2.88汉化版.exe录音软件MP3——Cooolsoft MP3 Sound Recorder2.88汉化版.exe录音软件MP3——Cooolsoft MP3 ...
在Android系统中,APK是应用程序的安装包,它包含了所有必要的代码、资源和配置文件。为了让用户能够从非Google Play商店来源安装APK,并确保其安全性和完整性,开发者需要对APK进行签名。签名过程涉及到一系列的...