我正在开发一个必须测量到 iBeacon 的距离的应用程序。当用户在一定距离(1 米)内时,应通知用户。
它在 iOS 上运行良好,但在 Android 上我得到了不同的结果。我正在使用 Estimote Android SDK ( https://github.com/Estimote/Android-SDK ) 和 Android 4.3。
下面是 Nexus 4 和 Nexus 5 的测量结果。iBeacon 放置在距离手机一米的地方(测量结果与更多样本一致):
Nexus 4:
08-25 11:39:04.788: : Major: 27485 Accuracy: 0.36351308115918884 Power: -74 Rssi: -67
08-25 11:39:05.880: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:06.911: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:07.962: : Major: 27485 Accuracy: 0.41856988869951295 Power: -74 Rssi: -68
08-25 11:39:09.003: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
Nexus 5:
08-25 11:35:31.443: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:32.483: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:33.513: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:34.553: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:35.593: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
如前所述,它们都不接近一米。 Nexus 4 的结果最接近,为 0.42 米。精度取自 Estimote SDK 中的 Utils.computeAccuracy。
最大的问题是不同的设备会给出不同的结果。我尝试过的大多数设备(Nexus 4、Nexus 7、HTC One Mine)给出的结果与 Nexus 4 相似。但是 Nexus 5 表明比其他设备更接近。
有没有办法让所有设备给出(接近)相似的结果?另一种了解不同设备如何测量的方法(因此算法可以补偿不同的结果)
还有没有人找到提高 Android Bluetooth LE 采样率的方法?
我真的很想在用户启动应用程序时阻止使用一些校准。
我必须使用 iBeacons(客户需求),但如果这有助于解决问题,则可以选择另一个库。
最佳答案
开源Android Beacon Library (@tar 提到的库的后继者包含一个过滤器,该过滤器保持 20 秒的 RSSI 测量平均值,丢弃顶部和底部 10% 的样本。这给出了一个相当稳定的距离估计,但它滞后的权衡在用户相对于信标移动时及时。也就是说,它类似于 iOS 设备估计的行为。
Android 设备的另一个挑战是每个型号都有不同的蓝牙天线,增益不同。这意味着在相对于信标的完全相同位置的两个不同设备型号上的平均接收信号电平将不同。我可以通过测试确认 Nexus 4 和 Nexus 5 的天线增益非常不同。
Android Beacon 库中的公式专为 Nexus 5 设计,但它是开源的,因此您可以根据需要为任何设备型号自定义代码。要为不同的设备制定新公式,您需要在不同距离(0.5m、1m、2m、3m...10m、12m...20m)进行多次 60 秒平均 RSSI 测量,然后进行最佳拟合计算.
开源库的 future 计划是为最常见的设备模型内置不同的公式,并根据设备检查键入使用的距离公式。这是很多工作,所以如果你能帮助志愿者,请点击我的照片与我联系!
关于android - 测量从 Android 设备到 iBeacon 的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483254/
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进
我编写了一个非常简单的Sassmixin,用于将像素值转换为rem值(请参阅JonathanSnook的articleonthebenefitsofusingrems)。这是代码://MixinCode$base_font_size:10;//10px@mixinrem($key,$px){#{$key}:#{$px}px;#{$key}:#{$px/$base_font_size}rem;}//Includesyntaxp{@includerem(font-size,14);}//RenderedCSSp{font-size:14px;font-size:1.4rem;}这个mixi
我在查询中使用geo_distancefilter和tire,它工作正常:search.filter:geo_distance,:distance=>"#{request.distance}km",:location=>"#{request.lat},#{request.lng}"我预计结果会以某种方式包括到我用于过滤器的地理位置的计算距离。有没有办法告诉elasticsearch在响应中包含它,这样我就不必在ruby中为每个结果计算它?==更新==我在谷歌群组中的foundtheanswer:search.sortdoby"_geo_distance","location"=>"
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid
1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La
我正在使用适用于AmazonSNS的AmazonAWSRubySDK,但我在使用已注册的设备时遇到了一些问题。有时,当设备再次注册时,我会收到类似AWS::SNS::Errors::InvalidParameterInvalidparameter:TokenReason:Endpointarn:aws:sns:us-east-1:****alreadyexists这样的错误具有相同的Token,但具有不同的属性。。如何检查端点是否已存在,更重要的是,如何获取给定token的端点? 最佳答案 感谢BvdBijl的想法,我做了一个扩展方