使用Rexsee的基站定位(RexseeCellLocation对象)。
需注意:基站信息是来自运营商的,仿真器只能模拟网络延迟(-netdelay)、网速(-netspeed)、以及一些电话相关的操作,gsm <call|accept|busy|cancel|data|hold|list|voice|status>。还不能模拟信号。

效果图:

function query(){  var loction = eval('('+rexseeCellLocation.getLastKnownLocation()+')');  var type = location.type.toLowerCase();  var mcc = parseInt(location.operator.substring(0,3));  var mnc = (type=='gsm')?parseInt(location.operator.substring(3)):location.systemId;  var cid= (type=='gsm')?location.cid:location.baseStationId;  var lac= (type=='gsm')?location.lac:location.networkId;  var postData="{\version\":\"1.1.0\",\"host\":\maps.google.com\",\"access_token\";\"2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe\",\"home_mobile_country_code\":"+mcc+",\"home_mobile_network_code\":"+mnc+",\"address_language\";\"zh_CN\",\"radio_type\";\""+type+"\",\"request_address\":true,\"cell_towers\":[{\"cell_id\":+cid+",\"location_area_code\":+lac+",\"mobile_aountry_code\":"+mcc+",\"mobile_network_code\":"+mnc+",\"timing_advance\":5555}]}";alert(rexseeAjax.syncSubmit('http://www.google.com/loc/json',postData,'utf-8'));}





RexseeCellLocation对象

/* * Copyright (C) 2011 The Rexsee Open Source Project * * Licensed under the Rexsee License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.rexsee.com/CN/legal/license.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */  package rexsee.location;   import rexsee.core.browser.JavascriptInterface;  import rexsee.core.browser.RexseeBrowser;  import android.content.Context;  import android.telephony.CellLocation;  import android.telephony.PhoneStateListener;  import android.telephony.TelephonyManager;  import android.telephony.cdma.CdmaCellLocation;  import android.telephony.gsm.GsmCellLocation;   public class RexseeCellLocation implements JavascriptInterface {          private static final String INTERFACE_NAME = "CellLocation";         @Override         public String getInterfaceName() {                 return mBrowser.application.resources.prefix + INTERFACE_NAME;         }         @Override         public JavascriptInterface getInheritInterface(RexseeBrowser childBrowser) {                 return this;         }         @Override         public JavascriptInterface getNewInterface(RexseeBrowser childBrowser) {                 return new RexseeCellLocation(childBrowser);         }          public static final String EVENT_ONCELLLOCATIONCHANGED = "onCellLocationChanged";          public final Context mContext;         private final RexseeBrowser mBrowser;         private final int mPhoneType;         private PhoneStateListener mListener = null;         private CellLocation mLocation = null;          public RexseeCellLocation(RexseeBrowser browser) {                 mContext = browser.getContext();                 mBrowser = browser;                 browser.eventList.add(EVENT_ONCELLLOCATIONCHANGED);                 TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);                 mPhoneType = tm.getPhoneType();         }          //JavaScript Interface         public boolean isEnabled() {                 return mListener != null;         }         public boolean enable() {                 try {                         TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);                         mListener = new PhoneStateListener() {                                 @Override                                 public void onCellLocationChanged(CellLocation location) {                                         mLocation = location;                                         mBrowser.eventList.run(EVENT_ONCELLLOCATIONCHANGED);                                 }                         };                         tm.listen(mListener, PhoneStateListener.LISTEN_CELL_LOCATION);                         return true;                 } catch (Exception e) {                         mBrowser.exception(getInterfaceName(), e);                         return false;                 }         }         public boolean disable() {                 if (mListener == null) return true;                 try {                         TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);                         tm.listen(mListener, PhoneStateListener.LISTEN_NONE);                         mListener = null;                         return true;                 } catch (Exception e) {                         mBrowser.exception(getInterfaceName(), e);                         return false;                 }         }         public String getLastKnownLocation() {                 if (mLocation == null) return "{}";                 TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);                 String rtn = "";                 rtn += "\"operator\":\"" + tm.getNetworkOperator() + "\"";                 rtn += ",\"operatorName\":\"" + tm.getNetworkOperatorName() + "\"";                 if (mPhoneType == TelephonyManager.PHONE_TYPE_GSM) {                         GsmCellLocation gsm = (GsmCellLocation) mLocation;                         rtn += ",\"type\":\"GSM\"";                         rtn += ",\"cid\":" + gsm.getCid();                         rtn += ",\"lac\":" + gsm.getLac();                 } else if (mPhoneType == TelephonyManager.PHONE_TYPE_CDMA) {                         CdmaCellLocation cdma = (CdmaCellLocation) mLocation;                         rtn += ",\"type\":\"CDMA\"";                         rtn += ",\"baseStationId\":" + cdma.getBaseStationId();                         rtn += ",\"baseStationLatitude\":" + cdma.getBaseStationLatitude();                         rtn += ",\"baseStationLongitude\":" + cdma.getBaseStationLongitude();                         rtn += ",\"networkId\":" + cdma.getNetworkId();                         rtn += ",\"systemId\":" + cdma.getSystemId();                 }                 return "{" + rtn + "}";         }   }

更多相关文章

  1. IntentService使用、原理
  2. android系统之sensor学习
  3. Android(安卓)Studio连接不上模拟器的解决方法
  4. android:json解析的两个工具:Gson和Jackson的使用小例子
  5. Android之Retrofit2.0 处理返回json报文并转换成bean对象
  6. Android中Application类用法
  7. android3.2系统removeHeadView空指针异常
  8. android java.lang.IllegalStateException: System services not
  9. Android(安卓)WebView Java和JavaScript的交互(一)

随机推荐

  1. ANDROID开机动画bootanimation.zip的详细
  2. fir.im Weekly - 8 个不能错过的 iOS / A
  3. [置顶] Android目录(更新中)
  4. Android,开源还是封闭?
  5. 浅谈android的selector背景选择器
  6. js调用android本地代码失败 兼容问题
  7. [译]提升Android应用性能的小贴士
  8. Android(安卓)图解向 Android(安卓)Studi
  9. Android中@id与@+id区别
  10. Android(安卓)APK应用安装原理(1)-解析An