zoukankan      html  css  js  c++  java
  • android 获取手机GSM/CDMA信号信息,并获得基站信息

     

    本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/

     

    在Android中我们常用的轻松获取WIFI信号列表,那如何获取CDMA或者GSM的手机信号呢?
    系统提供了TelephonyManager类,此类非常丰富,基本你所需要的手机信息都能获取到,那下面就来看看我们所需要的CDMA与GSM信号是如何获取的吧。

    private TelephonyManager telephonyManager;
    private PhoneStateListener phoneStateListener;
    首先声明两个变量

    在onCreate()方法中初始化变量
    InitPhoneStateListener();
    telephonyManager = (TelephonyManager) this.ctx.getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CELL_LOCATION);
    if(telephonyManager.getCellLocation()!=null){
    //获取当前基站信息
    phoneStateListener.onCellLocationChanged(telephonyManager.getCellLocation());
    }

    /** 初始化PhoneStateListener */
    private void InitPhoneStateListener() {
    phoneStateListener = new PhoneStateListener() {
    @Override
    public void onCellLocationChanged(CellLocation location) {
    // TODO Auto-generated method stub
    if (location instanceof GsmCellLocation) {// gsm网络
    phoneType = 1;
    GsmCell gsmCell = new GsmCell();
    gsmCell.lac = ((GsmCellLocation) location).getLac();
    gsmCell.cid = ((GsmCellLocation) location).getCid();
    /** 获取mcc,mnc */
    String mccMnc=telephonyManager.getNetworkOperator();
    if(mccMnc!=null&&mccMnc.length()>=5){
    gsmCell.mcc = mccMnc.substring(0, 3);
    gsmCell.mnc = mccMnc.substring(3, 5);
    }
    gsmCell.signal=lastSignal;
    gsmCell.time = System.currentTimeMillis();
    if (gsmCell.lac != -1 && gsmCell.cid != -1) {
    gsmCells.add(0, gsmCell);
    // Collections.sort(gsmCells);
    // /**最多保存近3个基站信息*/
    // if (gsmCells.size() >3)
    // gsmCells.remove(3);
    }
    //获取相邻基站信息
    List neighboringList=telephonyManager.getNeighboringCellInfo();
    for(NeighboringCellInfo ni:neighboringList){
    GsmCell gb = new GsmCell();
    gb.mnc=mccMnc.substring(3, 5);
    gb.lac=ni.getLac();
    gb.cid=ni.getCid();
    gb.signal=-133+2*ni.getRssi();
    gb.time=System.currentTimeMillis();
    gsmCells.add(gb);
    }
    } else {// 其他CDMA等网络
    try {
    Class cdmaClass = Class.forName("android.telephony.cdma.CdmaCellLocation");
    phoneType = 2;
    CdmaCellLocation cdma = (CdmaCellLocation) location;
    CdmaCell cdmaCell = new CdmaCell();
    cdmaCell.stationId = cdma.getBaseStationId() >= 0 ?
    cdma.getBaseStationId(): cdmaCell.stationId;
    cdmaCell.networkId = cdma.getNetworkId() >= 0 ? cdma
    .getNetworkId() : cdmaCell.networkId;
    cdmaCell.systemId = cdma.getSystemId() >= 0 ? cdma
    .getSystemId() : cdmaCell.systemId;
    /** 获取mcc,mnc */
    String mccMnc=telephonyManager.getNetworkOperator();
    if(mccMnc!=null&&mccMnc.length()>=5){
    cdmaCell.mcc = mccMnc.substring(0, 3);
    cdmaCell.mnc = mccMnc.substring(3, 5);
    }
    cdmaCell.signal=lastSignal;
    cdmaCell.time = System.currentTimeMillis();
    int lat = cdma.getBaseStationLatitude();
    int lon = cdma.getBaseStationLongitude();
    if (lat <Integer.MAX_VALUE&& lon <Integer.MAX_VALUE) {
    cdmaCell.lat = lat;
    cdmaCell.lon = lon;
    }
    if (cdmaCell.stationId != -1&& cdmaCell.networkId != -1&& cdmaCell.systemId != -1) {
    cdmaCells.add(0, cdmaCell);
    }
    List neighboringList=telephonyManager.getNeighboringCellInfo();
    for(NeighboringCellInfo ni:neighboringList){
    CdmaCell cdmaBean = new CdmaCell();
    cdmaBean.systemId=cdmaCell.systemId;
    cdmaBean.lac=ni.getLac();
    cdmaBean.cellid=ni.getCid();
    cdmaBean.signal=-113+2*ni.getRssi();
    cdmaCells.add(cdmaBean);
    }
    } catch (ClassNotFoundException classnotfoundexception) {
    }
    }// end CDMA网络
    super.onCellLocationChanged(location);
    }// end onCellLocationChanged

    @Override
    public void onServiceStateChanged(ServiceState serviceState) {
    // TODO Auto-generated method stub
    super.onServiceStateChanged(serviceState);
    }
    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    // TODO Auto-generated method stub
    int asu=signalStrength.getGsmSignalStrength();
    lastSignal=-113+2*asu; //信号强度
    super.onSignalStrengthsChanged(signalStrength);
    }
    };
    }// end InitPhoneStateListener

  • 相关阅读:
    线程池学习笔记
    线性表的顺序存储和链式存储的实现(C)
    二叉树遍历算法——包含递归前、中、后序和层次,非递归前、中、后序和层次遍历共八种
    【Linux学习笔记】栈与函数调用惯例
    Linux网络编程简单示例
    Linux常用C函数-接口处理篇(网络通信函数)
    android的快速开发框架集合
    Android访问网络数据的几种方式Demo
    Linux C函数库大全
    Mysql 之配置文件my.cnf
  • 原文地址:https://www.cnblogs.com/umlzhang/p/5893073.html
Copyright © 2011-2022 走看看