草庐IT

android - 网络位置提供商是否需要互联网来确定位置?

coder 2023-12-15 原文

Android 设备在使用网络提供商获取位置时是否需要互联网?我看到很少有文章说它可以在没有互联网的情况下工作,也很少有人说它需要互联网。

我正在更多地研究 Android 内部如何进行位置获取(而不是代码)。

文章说我们需要互联网:设备捕获手机 ID 和 wifi 热点并将其发送到谷歌服务器。谷歌服务器返回位置信息。这些文章说我们需要互联网来获取位置。

很少有文章说位置是使用蜂窝三角测量确定的,不需要互联网。

我已经尝试做测试来确认这一点。但测试结果令人困惑,无法从中推断出任何东西。

设备配置:我关闭了互联网、wifi 扫描和 GPS。这意味着设备只有蜂窝信号。 应用程序每分钟捕获一次位置。

测试结果一:

  • 我无法使用上述设备配置获取位置。我运行了这个测试 15 分钟以上。
  • 然后我打开了 3G 数据并获得了位置。
  • 发布此消息后,我再次关闭了 3G,我仍然能够以不同的准确度获取位置。

测试用例 2:(续测试用例 1)

  • 测试用例 1 后,我一直在办公室位置获取位置。
  • 然后我回家了,当我检查地下室(-1 楼)的位置时,第一次读数的位置精度约为 900 米,第二次和进一步读数没有位置。这持续了 20 多分钟。
  • 20 分钟后,我开始接收位置信息。

网络定位究竟是如何工作的。我更多地关注 Android 内部如何进行位置获取而不是代码。

所以这是我的问题:

  1. Does it pass cellid and wifi hotspots and get location (using internet)?
  2. Does it do cellular triangulation?
  3. Does it cache data and use accelerometer and compass to determine location without internet?

(尽管在 stackoverflow 中也有类似的问题。它们更多的是代码而不是 Android 内部工作。因此发布这个问题)

最佳答案

在为 Android 开发位置感知应用程序时,您可以利用 GPS 和 Android 的 Network Location Provider 获取用户位置。虽然 GPS 最准确,但它只能在室外工作,它会很快消耗电池电量,并且不能像用户希望的那样快速返回位置。

Android 的 Network Location Provider 使用手机信号塔和 Wi-Fi 信号确定用户位置,以适用于室内和室外的方式提供位置信息,响应速度更快,并且使用更少的电池电量。要在您的应用程序中获取用户位置,您可以同时使用 GPS 和 Network Location Provider,或者只使用一个。

If you are using both NETWORK_PROVIDER and GPS_PROVIDER, then you need to request only the permission ACCESS_FINE_LOCATION 

ACCESS_COARSE_LOCATION includes permission only for NETWORK_PROVIDER

根据您使用的权限可能会给出不同的结果

检查这些 websitestrategies used by android for location

以Anil vk的评论为准

网络 –>(AGPS、CellID、WiFi MACID) :该提供商根据手机信号塔和 WiFi 接入点的可用性来确定位置。通过网络查找检索结果。需要权限 android.permission.ACCESS_COARSE_LOCATION 或 android.permission.ACCESS_FINE_LOCATION。

答案是是的它取决于来自手机信号塔的信号强度以获得准确的结果你可以看到这个website通过使用不同的方式解决准确性和电池耗电问题。

关于android - 网络位置提供商是否需要互联网来确定位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36760123/

有关android - 网络位置提供商是否需要互联网来确定位置?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  3. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  4. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  5. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

  6. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  7. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  8. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  9. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  10. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

随机推荐