欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

分享Android CellLocation源码,基于Rexsee对象的基站定位功能,celllocationrexsee

来源: 开发者 投稿于  被查看 6170 次 评论:90

分享Android CellLocation源码,基于Rexsee对象的基站定位功能,celllocationrexsee


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

1.代码段示例

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

2.[图片] 1318156045.jpg

3.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 + "}";  
       }  
 
	}

用户评论