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

Android Wifi定位

 2010-08-23 01:31:00 来源:WEB开发网   
核心提示:声明Native函数1 JNINativeMethod AndroidRadioDataProvider::native_methods_[] = { 2 {"onUpdateAvailable", 3 "(L" GEARS_JAVA_PACKAGE "/Android

声明Native函数

1 JNINativeMethod AndroidRadioDataProvider::native_methods_[] = { 2 {"onUpdateAvailable", 3 "(L" GEARS_JAVA_PACKAGE "/AndroidRadioDataProvider$RadioData;J)V", 4 reinterpret_cast(AndroidRadioDataProvider::OnUpdateAvailable) 5 }, 6 }; 7

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

先判断基站信息有没有变化,如果有变化则通知相关的监听者。

1 void AndroidRadioDataProvider::NewRadioDataAvailable( 2 RadioData* new_radio_data) { 3 bool is_update_available = false; 4 data_mutex_.Lock(); 5 if (new_radio_data && !radio_data_.Matches(*new_radio_data)) { 6 radio_data_ = *new_radio_data; 7 is_update_available = true; 8 } 9 // Avoid holding the mutex locked while notifying observers. 10 data_mutex_.Unlock(); 11 12 if (is_update_available) { 13 NotifyListeners(); 14 } 15 }

接下来的过程,在基站定位和WIFI定位是一样的,后面我们再来介绍。下面我们先看 WIFI定位

3.关注android平台中的WIFI变化。

JAVA类AndroidWifiDataProvider扩展了 BroadcastReceiver类,它关注WIFI扫描结果:

1 IntentFilter filter = new IntentFilter(); 2 filter.addAction(mWifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 3 mContext.registerReceiver(this, filter, null, handler);

当收到WIFI扫描结果后,调用Native函数 onUpdateAvailable,并把WIFI的扫描结果传递过去。

1 public void onReceive(Context context, Intent intent) { 2 if (intent.getAction().equals( 3 mWifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { 4 if (Config.LOGV) { 5 Log.v(TAG, "Wifi scan resulst available"); 6 } 7

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

Tags:Android Wifi 定位

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