WEB开发网
开发学院手机开发Android 开发 Gears Android WIFI/基站定位源代码分析 阅读

Gears Android WIFI/基站定位源代码分析

 2010-03-18 16:11:00 来源:WEB开发网   
核心提示:2.Native函数onUpdateAvailable是在radio_data_provider_android.cc里实现的,声明Native函数JNINativeMethod AndroidRadioDataProvider::native_methods_[] = {{"onUpdateAvailabl

2.Native函数onUpdateAvailable是在radio_data_provider_android.cc里实现的。

声明Native函数

JNINativeMethod AndroidRadioDataProvider::native_methods_[] = {

{"onUpdateAvailable",

"(L" GEARS_JAVA_PACKAGE "/AndroidRadioDataProvider$RadioData;J)V",

reinterpret_cast(AndroidRadioDataProvider::OnUpdateAvailable)

},

};

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();

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

Tags:Gears Android WIFI

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