android 3g状态及信号监测

/*
 * tel.getNetworkOperator()
 3G中国是460固定的,
 中国移动的是 46000
 中国联通的是 46001
 中国电信的是 46003
 *获取国别
 tel.getSimCountryIso()
 */ 网络

 public class My3GInfo {
  private WifiManager mWifi;
  private Context mContext;
  private Handler mHandler;
  private ImageView img;
  private String STRNetworkOperator[] = { "46000", "46001", "46003" };
  private int mark = -1;
  private int position;
  private int img3g[] = {};
  private boolean is3Ghave = false;
  private TelephonyManager tel;
  
  public My3GInfo(Context context, ImageView img) {
   mContext = context;
   this.img = img;
   init();
  } ui

  private void init() {
   // TODO Auto-generated method stub
   /* 可 参考一下相关的方法,获得本身想要的参数来处理本身的ui
    public void initListValues(){           
            tel.getDeviceId());//获取设备编号
            tel.getSimCountryIso());//获取SIM卡国别
            tel.getSimSerialNumber());//获取SIM卡序列号   
            (simState[tm.getSimState()]);//获取SIM卡状态
            (tel.getDeviceSoftwareVersion()!=null?tm.getDeviceSoftwareVersion():"未知"));    //获取软件版本
            tel.getNetworkOperator());//获取网络运营商代号
            tel.getNetworkOperatorName());//获取网络运营商名称
            (phoneType[tm.getPhoneType()]);//获取手机制式
            tel.getCellLocation().toString());//获取设备当前位置
       }*/
   tel = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 
    
    firstView();   
    getmark();
     //设置监听事件,监听信号强度的改变和状态的改变
   tel.listen(new PhoneStateMonitor(),
     PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
       | PhoneStateListener.LISTEN_SERVICE_STATE);
  }
  private void getmark()//获得当前电话卡的归属运营商
  {
   String strNetworkOperator = tel.getNetworkOperator();
   if (strNetworkOperator != null) {
    for (int i = 0; i < 3; i++) {
     if (strNetworkOperator.equals(STRNetworkOperator[i])) {
      mark = i;
      Log.v(TAG, "mark==" + i);
      break;
     }
    }
   } else {
    mark = -1;
   }
  }
  private void firstView() {//第一次自动检测并设置初始状态 this

   int state = tel.getSimState();
   switch (state) {
   case TelephonyManager.SIM_STATE_UNKNOWN:
    is3Ghave = false;
    break;
   case TelephonyManager.SIM_STATE_READY:
    is3Ghave = true;
    break;
   case TelephonyManager.SIM_STATE_ABSENT:
    is3Ghave = false;
    break;
   default:
    break;
   }  
  } 事件

  private String TAG = "WHLOG";
  int signal;
  class PhoneStateMonitor extends PhoneStateListener {
   public void onSignalStrengthsChanged(SignalStrength signalStrength) {//3g信号强度的改变
    super.onSignalStrengthsChanged(signalStrength);
    /*
     * signalStrength.isGsm() 是否GSM信号 2G or 3G
     * signalStrength.getCdmaDbm(); 联通3G 信号强度
     * signalStrength.getCdmaEcio(); 联通3G 载干比
     * signalStrength.getEvdoDbm(); 电信3G 信号强度
     * signalStrength.getEvdoEcio(); 电信3G 载干比
     * signalStrength.getEvdoSnr(); 电信3G 信噪比
     * signalStrength.getGsmSignalStrength(); 2G 信号强度
     * signalStrength.getGsmBitErrorRate(); 2G 误码率    
     * 载干比 ,它是指空中模拟电波中的信号与噪声的比值
     */
    Log.v(TAG, "change signal");
    if(mark<0)
    {
     getmark();
    }
    if (mark == 0) {
     signal = signalStrength.getGsmSignalStrength();
    } else if (mark == 1) {
     signal = signalStrength.getCdmaDbm();
    } else if (mark == 2) {
     signal = signalStrength.getEvdoDbm();
    }
    if(is3Ghave==true){
    getLevel();
    show3GDetail(position);
    }
   } ci

   private void getLevel() {
    // TODO Auto-generated method stub
    if (mark == 2) {//电信3g信号强度的分类,能够按照ui自行划分等级
     if (signal >= -65)
      position = 5;
     else if (signal >= -75)
      position = 4;
     else if (signal >= -85)
      position = 3;
     else if (signal >= -95)
      position = 2;
     else if (signal >= -105)
      position = 1;
     else
      position = 0;
    }
    if (mark == 1) {//联通3g信号划分
     if (signal >= -75)
      position = 5;
     else if (signal >= -80)
      position = 4;
     else if (signal >= -85)
      position = 3;
     else if (signal >= -95)
      position = 2;
     else if (signal >= -100)
      position = 1;
     else
      position = 0;
    }
    if (mark == 0) {//移动信号的划分,这个不是很肯定是2g仍是3g
     if (signal <= 2 || signal == 99)
      position = 0;
     else if (signal >= 12)
      position = 5;
     else if (signal >= 10)
      position = 4;
     else if (signal >= 8)
      position = 3;
     else if (signal >= 5)
      position = 2;
     else
      position = 1;
    }
   } get

   public void onServiceStateChanged(ServiceState serviceState) {//3g状态的改变
    super.onServiceStateChanged(serviceState);
    /*
     * ServiceState.STATE_EMERGENCY_ONLY 仅限紧急呼叫
     * ServiceState.STATE_IN_SERVICE 信号正常
     * ServiceState.STATE_OUT_OF_SERVICE 不在服务区
     * ServiceState.STATE_POWER_OFF 断电
     */
    int pos = serviceState.getState();
    Log.v(TAG, "state change===" + pos); it

    switch (pos) {
    case ServiceState.STATE_EMERGENCY_ONLY:
     is3Ghave=true;
     show3GDetail(0);
     break;
    case ServiceState.STATE_IN_SERVICE:
     is3Ghave=true;  
     show3GDetail(3);
     break;
    case ServiceState.STATE_OUT_OF_SERVICE:
     is3Ghave=false;
     show3GDetail(6);
     break;
    case ServiceState.STATE_POWER_OFF:
     is3Ghave=false;
     show3GDetail(6);
     break;
    default:
     break;
    }
   }
  } io

  private void show3GDetail(int level) {//设置显示3g的图标
   // TODO Auto-generated method stub
   if(is3Ghave==false)
   {
    img.setBackgroundResource(img3g[6]);
   }else{
   img.setBackgroundResource(img3g[level]);
   }
  }
 } class

相关文章
相关标签/搜索