这几天在做基站定位,发觉CDMA的基站定位在网上资料很少。经过漫长的摸索,其中的小小收获给大家分享一下!
这个是CDMA中国电信的基站定位获取经纬度的源码及测试截图!在模拟器中用似乎不行,模拟器的网络不是CDMA的。有知道的请指点指点!
测试程序源码: netWorkLocationTest2.rar
主要代码:
复制代码
调用google gears的方法,该方法调用gears来获取经纬度 代码:
复制代码
在弄这个的时候不要忘了加权限噢!
复制代码
程序只是测试用,尚不完善!希望这个东东对需要的朋友有用!有什么不对的地方请大家指点指点。
这个是CDMA中国电信的基站定位获取经纬度的源码及测试截图!在模拟器中用似乎不行,模拟器的网络不是CDMA的。有知道的请指点指点!
测试程序源码: netWorkLocationTest2.rar
主要代码:
- public void onClick(View v) {
- // TODO Auto-generated method stub
- tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- //int type = tm.getNetworkType();
- //if (type ==TelephonyManager.NETWORK_TYPE_CDMA) {
- location = (CdmaCellLocation) tm.getCellLocation();
- if(location == null)
- return;
- int sid = location.getSystemId();//系统标识 mobileNetworkCode
- int bid = location.getBaseStationId();//基站小区号 cellId
- int nid = location.getNetworkId();//网络标识 locationAreaCode
-
- Log.i(\"sid:\", \"\" + sid);
- Log.i(\"bid:\", \"\" + bid);
- Log.i(\"nid:\", \"\" + nid);
- ArrayList<CellIDInfo> CellID = new ArrayList<CellIDInfo>();
- CellIDInfo info = new CellIDInfo();
- info.cellId = bid;
- info.locationAreaCode = nid;
- info.mobileNetworkCode = String.valueOf(sid);
- info.mobileCountryCode = tm.getNetworkOperator().substring(0, 3);
- info.mobileCountryCode = tm.getNetworkOperator().substring(3, 5);
- info.radioType = \"cdma\";
- CellID.add(info);
- Log.d(\"cellId:\", \"\" + info.cellId);
- Log.d(\"locationAreaCode:\", \"\" + info.locationAreaCode);
- Log.d(\"mobileNetworkCode:\", info.mobileNetworkCode);
- Log.d(\"mobileCountryCode:\", info.mobileCountryCode);
- Location loc = callGear(CellID);
-
- if (loc !=null)
- mTextView.setText(\"纬度:\" + loc.getLatitude() + \"\\n经度:\" + loc.getLongitude());
- //}// end if
- }// end onclick
调用google gears的方法,该方法调用gears来获取经纬度 代码:
- //调用google gears的方法,该方法调用gears来获取经纬度
- private Location callGear(ArrayList<CellIDInfo> cellID) {
- if (cellID == null)
- return null;
-
- DefaultHttpClient client = new DefaultHttpClient();
- HttpPost post = new HttpPost(
- \"http://www.google.com/loc/json\");
- JSONObject holder = new JSONObject();
-
- try {
- holder.put(\"version\", \"1.1.0\");
- holder.put(\"host\", \"maps.google.com\");
- holder.put(\"home_mobile_country_code\", cellID.get(0).mobileCountryCode);
- holder.put(\"home_mobile_network_code\", cellID.get(0).mobileNetworkCode);
- holder.put(\"radio_type\", cellID.get(0).radioType);
- holder.put(\"request_address\", true);
- if (\"460\".equals(cellID.get(0).mobileCountryCode))
- holder.put(\"address_language\", \"zh_CN\");
- else
- holder.put(\"address_language\", \"en_US\");
-
- JSONObject data,current_data;
-
- JSONArray array = new JSONArray();
-
- current_data = new JSONObject();
- current_data.put(\"cell_id\", cellID.get(0).cellId);
- current_data.put(\"location_area_code\", cellID.get(0).locationAreaCode);
- current_data.put(\"mobile_country_code\", cellID.get(0).mobileCountryCode);
- current_data.put(\"mobile_network_code\", cellID.get(0).mobileNetworkCode);
- current_data.put(\"age\", 0);
- current_data.put(\"signal_strength\", -60);
- current_data.put(\"timing_advance\", 5555);
- array.put(current_data);
-
- holder.put(\"cell_towers\", array);
-
- StringEntity se = new StringEntity(holder.toString());
- Log.e(\"Location send\", holder.toString());
- post.setEntity(se);
- HttpResponse resp = client.execute(post);
-
- HttpEntity entity = resp.getEntity();
-
- BufferedReader br = new BufferedReader(
- new InputStreamReader(entity.getContent()));
- StringBuffer sb = new StringBuffer();
- String result = br.readLine();
- while (result != null) {
- Log.e(\"Locaiton reseive\", result);
- sb.append(result);
- result = br.readLine();
- }
-
- data = new JSONObject(sb.toString());
- Log.d(\"-\", sb.toString());
- data = (JSONObject) data.get(\"location\");
-
- Location loc = new Location(LocationManager.NETWORK_PROVIDER);
- loc.setLatitude((Double) data.get(\"latitude\"));
- loc.setLongitude((Double) data.get(\"longitude\"));
- loc.setAccuracy(Float.parseFloat(data.get(\"accuracy\").toString()));
- loc.setTime( System.currentTimeMillis());//AppUtil.getUTCTime());
- return loc;
- } catch (JSONException e) {
- e.printStackTrace();
- return null;
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- Log.d(\"-\", \"null 1\");
- return null;
- }
在弄这个的时候不要忘了加权限噢!
- <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"></uses-permission>
- <uses-permission android:name=\"android.permission.READ_PHONE_STATE\"></uses-permission>
- <uses-permission android:name=\"android.permission.INTERNET\"></uses-permission>
程序只是测试用,尚不完善!希望这个东东对需要的朋友有用!有什么不对的地方请大家指点指点。