WEB开发网
开发学院手机开发Android 开发 Android Wifi定位 阅读

Android Wifi定位

 2010-08-23 01:31:00 来源:WEB开发网   
核心提示:instance_ = NULL; 22 } 23 return true; 24 } 256.谁在监听变化(WIFI/基站)NetworkLocationProvider在监听变化(WIFI/基站):1 radio_data_provider_ = RadioDataProvider::Register(this);
instance_ = NULL; 22 } 23 return true; 24 } 25

6.谁在监听变化(WIFI/基站)

NetworkLocationProvider在监听变化(WIFI/基站):

1 radio_data_provider_ = RadioDataProvider::Register(this); 2 wifi_data_provider_ = WifiDataProvider::Register(this);

当有变化时,会调用函数DeviceDataUpdateAvailable:

代码

// DeviceDataProviderInterface::ListenerInterface implementation.void NetworkLocationProvider::DeviceDataUpdateAvailable( RadioDataProvider *provider) { MutexLock lock(&data_mutex_); assert(provider == radio_data_provider_); is_radio_data_complete_ = radio_data_provider_->GetData(&radio_data_); DeviceDataUpdateAvailableImpl();} void NetworkLocationProvider::DeviceDataUpdateAvailable( WifiDataProvider *provider) { assert(provider == wifi_data_provider_); MutexLock lock(&data_mutex_); is_wifi_data_complete_ = wifi_data_provider_->GetData(&wifi_data_); DeviceDataUpdateAvailableImpl();}

无论是WIFI还是基站变化,最后都会调用 DeviceDataUpdateAvailableImpl:

1 void NetworkLocationProvider::DeviceDataUpdateAvailableImpl() {2 timestamp_ = GetCurrentTimeMillis();3 4 // Signal to the worker thread that new data is available.5 is_new_data_available_ = true;6 thread_notification_event_.Signal();7 }

这里面只是发了一个signal,通知另外一个线程去处理。

7.谁在等待thread_notification_event_

线程函数NetworkLocationProvider::Run在一个循环中等待 thread_notification_event,当有变化(WIFI/基站)时,就准备请求服务器查询位置。

先等待:

1 if (remaining_time > 0) {2 thread_notification_event_.WaitWithTimeout(3 static_cast(remaining_time));4 } else {5 thread_notification_event_.Wait();6 }

准备请求:

1 if (make_request) { 2 MakeRequest(); 3 remaining_time = 1; 4 }

再来看MakeRequest的实现:

先从cache中查找位置:

1 const Position *cached_position = 2

上一页  1 2 3 4 5 6 7  下一页

Tags:Android Wifi 定位

编辑录入:coldstar [复制链接] [打 印]
赞助商链接