Android Wifi定位
2010-08-23 01:31:00 来源:WEB开发网Broncho A1还不支持基站和WIFI定位,Android的老版本里是有NetworkLocationProvider的,它实现了基站和WIFI定位,但从 android 1.5之后就被移除了。本来想在broncho A1里自己实现NetworkLocationProvider的,但一直没有时间去研究。我知道 gears(http://code.google.com/p/gears/)是有提供类似的功能,昨天研究了一下Gears的代码,看能不能移植到 android中来
1.下载源代码
svn checkout http://gears.googlecode.com/svn/trunk/ gears-read-only
定位相关的源代码在gears/geolocation目录中。
2.关注android平台中的基站位置变化
JAVA类AndroidRadioDataProvider是 PhoneStateListener的子类,用来监听Android电话的状态变化。当服务状态、信号强度和基站变化时,
就会用下面代码获取小区信息:
1 RadioData radioData = new RadioData(); 2 GsmCellLocation gsmCellLocation = (GsmCellLocation) cellLocation; 3 4 // Extract the cell id, LAC, and signal strength. 5 radioData.cellId = gsmCellLocation.getCid(); 6 radioData.locationAreaCode = gsmCellLocation.getLac(); 7 radioData.signalStrength = signalStrength; 8 9 // Extract the home MCC and home MNC. 10 String operator = telephonyManager.getSimOperator(); 11 radioData.setMobileCodes(operator, true); 12 13 if (serviceState != null) { 14 // Extract the carrier name. 15 radioData.carrierName = serviceState.getOperatorAlphaLong(); 16 17 // Extract the MCC and MNC. 18 operator = serviceState.getOperatorNumeric(); 19 radioData.setMobileCodes(operator, false); 20 } 21 22 // Finally get the radio type. 23 int type = telephonyManager.getNetworkType(); 24 if (type == TelephonyManager.NETWORK_TYPE_UMTS) { 25 radioData.radioType = RADIO_TYPE_WCDMA; 26 } else if (type == TelephonyManager.NETWORK_TYPE_GPRS 27 || type == TelephonyManager.NETWORK_TYPE_EDGE) { 28 radioData.radioType = RADIO_TYPE_GSM; 29 } 30
然后再调用用C代码实现的onUpdateAvailable函数。
2.Native函数onUpdateAvailable是在 radio_data_provider_android.cc里实现的。
更多精彩
赞助商链接