1.获得TelephoneManager:
- TelephonyManager telephoneManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
2.获得PhoneStateListener:
- final int type = telephoneManager.getNetworkType();
- PhoneStateListener phoneStateListener = new PhoneStateListener() {
- @Override
- public void onSignalStrengthsChanged(SignalStrength signalStrength) {
- // TODO Auto-generated method stub
- super.onSignalStrengthsChanged(signalStrength);
- StringBuffer sb = new StringBuffer();
- String strength = String.valueOf(signalStrength
- .getGsmSignalStrength());
- if (type == TelephonyManager.NETWORK_TYPE_UMTS
- || type == TelephonyManager.NETWORK_TYPE_HSDPA) {
- sb.append("联通3g").append("信号强度:").append(strength);
- } else if (type == TelephonyManager.NETWORK_TYPE_GPRS
- || type == TelephonyManager.NETWORK_TYPE_EDGE) {
- sb.append("移动或者联通2g").append("信号强度:").append(strength);
- }else if(type==TelephonyManager.NETWORK_TYPE_CDMA){
- sb.append("电信2g").append("信号强度:").append(strength);
- }else if(type==TelephonyManager.NETWORK_TYPE_EVDO_0
- ||type==TelephonyManager.NETWORK_TYPE_EVDO_A){
- sb.append("电信3g").append("信号强度:").append(strength);
- }else{
- sb.append("非以上信号").append("信号强度:").append(strength);
- }
- toast.setText(sb.toString());
- toast.show();
- }
- };
对于上面代码的解释:
通过telePhoneManager获得网络类型,源码中给出的网络类型有以下:
- /** Network type is unknown */
- public staticfinalint NETWORK_TYPE_UNKNOWN =0;
- /** Current network is GPRS */
- public staticfinalint NETWORK_TYPE_GPRS =1;
- /** Current network is EDGE */
- public staticfinalint NETWORK_TYPE_EDGE =2;
- /** Current network is UMTS */
- public staticfinalint NETWORK_TYPE_UMTS =3;
- /** Current network is CDMA: Either IS95A or IS95B*/
- public staticfinalint NETWORK_TYPE_CDMA =4;
- /** Current network is EVDO revision 0*/
- public staticfinalint NETWORK_TYPE_EVDO_0 =5;
- /** Current network is EVDO revision A*/
- public staticfinalint NETWORK_TYPE_EVDO_A =6;
- /** Current network is 1xRTT*/
- public staticfinalint NETWORK_TYPE_1xRTT =7;
- /** Current network is HSDPA */
- public staticfinalint NETWORK_TYPE_HSDPA =8;
- /** Current network is HSUPA */
- public staticfinalint NETWORK_TYPE_HSUPA =9;
- /** Current network is HSPA */
- public staticfinalint NETWORK_TYPE_HSPA =10;
- /** Current network is iDen */
- public staticfinalint NETWORK_TYPE_IDEN =11;
- /** Current network is EVDO revision B*/
- public staticfinalint NETWORK_TYPE_EVDO_B =12;
在中国,联通3g为UMTS或者HSDPA,电信的3g为EVDO,移动和联通的2g为GPRS或者EGDE,电信的2G为CMDA
onSignalStrengthsChanged()方法,当信号改变时回调
3.注册监听到telephoneManager:
- telephoneManager.listen(phoneStateListener,
- PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
4.在manifest中获得权限
<uses-permissionandroid:name="android.permission.CHANGE_NEWWORK_STATE"/>