从LocationManager获取多个NETWORK_PROVIDER

问题描述:

LocationManager如何在获取位置数据时选择使用哪个NETWORK_PROVIDER?我希望能够识别LocationManager从中选择NETWORK_PROVIDER的提供者。从LocationManager获取多个NETWORK_PROVIDER

例如,附近有两个NETWORK_PROVIDER位置,X(关闭)和Y(不如关闭)。当站在一个地方,有时NETWORK_PROVIDER将是X,有时是Y.我认为精度最高的位置会被返回(这就是为什么通常会返回X),并且所有其他网络都会被忽略,但是我想同时返回所有附近网络(或至少是前2或3)的列表。

任何.getProvider()方法(据我所知)会返回提供者的类型(network,gps,passive),但没有任何可以真正标识提供者的东西。返回位置时,位置数据对供应商而言是唯一的,但不能用于选择供应商。我可以从X获取数据,但是我不能告诉程序忽略X(或者我能吗?)。

无论如何要做到这一点?要返回一个NETWORK_PROVIDERS列表或数组,然后逐步获取位置数据?

并且不,使用GPS_PROVIDER不是一个可接受的答案,因为我只需要NETWORK_PROVIDER数据。

这个答案不是基于任何证据,而是我对位置提供者如何工作的理解。当您申请NETWORK_PROVIDER时,您基本上会要求它根据所有可用的信息为您提供他们估计的位置。例如,您可能有3个wifi网络和2个蜂窝塔,并且该信息被发送到互联网上的服务器。使用这些信息,他们会计算他们认为自己的位置,然后将其返回给您。所以,换句话说,network_provider的位置是基于手机可用的所有wifi/cell-tower信息的总和。

个别地,wifi热点并没有告诉你太多关于你在哪里。手机信号塔为您提供一些位置信息,但您需要一些信息来精确地对您的位置进行三角测量。此外,请注意,您需要互联网/数据连接,因为该位置由某个服务器决定,而不是在您的手机上完成。这是因为如果没有将每个热点映射到物理位置的数据库,知道附近的wifi热点(更具体地说是MAC地址)是没有用的。