`
ctfzh
  • 浏览: 31881 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

使用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 + "}";  
       }  
 
	}

 

 

分享到:
评论

相关推荐

    Android应用源码之androidGPS及WIFI基站定位坐标源码.zip

    在Android系统中,定位服务是应用开发者经常需要用到的功能,它主要依赖于GPS(全球定位系统)和Wi-Fi基站定位技术。这份"Android应用源码之androidGPS及WIFI基站定位坐标源码.zip"包含了实现这两种定位方式的源代码...

    Android 基站定位源码.rar

    在Android系统中,基站定位是一种常见的移动设备定位技术,它基于手机接收到来自周围基站的信号强度来估算设备的位置。这种技术尤其适用于GPS信号不可用或者较弱的环境,如室内或城市高楼之间。本篇将深入探讨...

    Android基站定位原理及实现代码

    Android基站定位原理主要依赖于手机中的TelephonyManager和CellLocation两个类。TelephonyManager类能够提供有关设备的电话服务状态的信息,包括当前的网络类型、电话号码、SIM卡状态等。而CellLocation类则提供有关...

    androidGSM+CDMA基站定位[参照].pdf

    总的来说,Android的基站定位功能依赖于`TelephonyManager`类,通过获取网络类型和手机连接的基站信息,实现对移动设备位置的估计。开发者需要根据不同的网络制式选择合适的`CellLocation`子类,并处理相应的基站...

    android定位

    **基站定位** 是基于手机与周围移动通信基站之间的信号强度和角度来确定设备位置的方法。基站的位置通常是已知的,通过测量到多个基站的距离或信号强度,通过三角定位原理计算出设备的大致位置。在Android中,这可以...

    google map开发经验分享

    本文将分享关于Google Map API的开发经验,特别是自定义图层和基站定位这两个关键点。 首先,开发Google Map应用的基础工作是设置MapView。MapView是展示地图的核心组件,它需要在MapActivity中使用。创建一个...

    android cell loc

    5. **定位算法**:基于基站的定位通常涉及到三角定位或距离反向散射(RSSI)计算。通过比较手机与多个基站的距离,可以估计设备的大概位置。距离通常根据信号强度和基站的已知发射功率计算得出。 6. **误差分析**:...

    Android-telephony各文件解释[归纳].pdf

    Android-telephony是Android操作系统中的一部分,负责处理手机的通话功能。本文将对Android-telephony中各文件进行解释,涵盖CDMA和GSM等移动通信技术标准。 1. frameworks/base/telephony/java/android/telephony/...

    cordova-celllocation-plugin:用于访问 GSMCellLocation 的 Cordova 插件

    科尔多瓦细胞定位插件用于在 Android 上访问 GSMCellLocation 的 Cordova 插件安装 cordova plugin add https://github.com/Rudloff/cordova-celllocation-plugin.git用法 cellLocation.get(function (result) { var...

    android手机相关信息的获取.doc

    `getCellLocation()`方法返回一个`CellLocation`对象,它可以提供手机所在基站的位置信息。不过,获取这种信息可能需要额外的权限,如`ACCESS_FINE_LOCATION`或`ACCESS_COARSE_LOCATION`。 8. **设备软件版本**: ...

    SIM基站信息获取

    4. 解析返回的CellLocation对象:这可能是GsmCellLocation或CdmaCellLocation,具体取决于网络类型(GSM或CDMA)。 5. 读取相关信息:如CellID、LAI、信号强度等,并进行相应的处理或展示。 在提供的"TestSim"文件...

    移动联通电信获取基站数据库的专项方案.doc

    然而,getCellLocation方法返回的是抽象类CellLocation的对象,因此我们需要根据接入网络制式来使用其子类CdmaCellLocation或GsmCellLocation。 在移动联通电信获取基站数据库的专项方案中,我们可以通过...

    Android中获取IMEI码的方法

    - `tm.getCellLocation()`:获取手机当前的细胞位置信息,通常是CellLocation对象,可以用来获取基站信息。 3. **设备软件版本**: - `tm.getDeviceSoftwareVersion()`:获取设备的软件版本,如IMEI/SV(软件版本...

    TelephonyManager类使用方法大全

    TelephonyManager 提供了获取电话方位的方法,返回 CellLocation 对象,包含了基站的信息。开发者可以使用 `tm.getCellLocation()` 方法获取当前的电话方位。 3. 获取设备 ID TelephonyManager 提供了获取设备 ID ...

    Android 读取SIM卡参数

    在Android开发中,有时我们需要获取SIM卡的相关信息,例如IMSI(国际移动用户识别码)、IMEI(国际移动设备身份码)等,这些信息对于实现某些功能(如网络状态检测、设备唯一标识等)至关重要。本文将详细介绍如何...

    SIMCom SIM800设计应用

    - **接口与功能**:提供了硬件音频接口、MMS彩信、基站定位(CellLocation)、远程升级(FOTA)、TTS语音播报、音频文件播放及录制等多种功能,并支持HTTP、FTP等更高级别的TCP/IP协议。 - **应用场景**:适合于车载行驶...

    QT处理Excel数据到Table Widget的四种方法

    本文将详细讲解四种方法来实现这个功能,以帮助开发者更好地理解和应用。 方法一:使用QFile和QTextStream 这种方法适用于Excel文件中的数据比较简单,主要是纯文本类型。首先,通过QFile打开Excel文件,然后利用...

Global site tag (gtag.js) - Google Analytics