Gears Android WIFI/基站定位源代码分析
2010-03-18 16:11:00 来源:WEB开发网2.Native函数onUpdateAvailable是在radio_data_provider_android.cc里实现的。
声明Native函数
JNINativeMethod AndroidRadioDataProvider::native_methods_[] = {
{"onUpdateAvailable",
"(L" GEARS_JAVA_PACKAGE "/AndroidRadioDataProvider$RadioData;J)V",
reinterpret_cast
},
};
JNI调用好像只能调用静态成员函数,把对象本身用一个参数传进来,然后再调用对象的成员函数。
void AndroidRadioDataProvider::OnUpdateAvailable(JNIEnv* env,
jclass cls,
jobject radio_data,
jlong self) {
assert(radio_data);
assert(self);
AndroidRadioDataProvider *self_ptr =
reinterpret_cast(self);
RadioData new_radio_data;
if (InitFromJavaRadioData(env, radio_data, &new_radio_data)) {
self_ptr->NewRadioDataAvailable(&new_radio_data);
}
}
先判断基站信息有没有变化,如果有变化则通知相关的监听者。
void AndroidRadioDataProvider::NewRadioDataAvailable(
RadioData* new_radio_data) {
bool is_update_available = false;
data_mutex_.Lock();
if (new_radio_data && !radio_data_.Matches(*new_radio_data)) {
radio_data_ = *new_radio_data;
is_update_available = true;
}
// Avoid holding the mutex locked while notifying observers.
data_mutex_.Unlock();
if (is_update_available) {
NotifyListeners();
}
}
接下来的过程,基站定位和WIFI定位是一样的,后面我们再来介绍。下面我们先看WIFI定位。
3.关注android平台中的WIFI变化。
JAVA类AndroidWifiDataProvider扩展了BroadcastReceiver类,它关注WIFI扫描结果:
IntentFilter filter = new IntentFilter();
更多精彩
赞助商链接