`

android 3G 手机信号 信息获取

 
阅读更多

转于:http://blog.csdn.net/hanvy_xia/article/details/8003185

-----------------------------------------------------------------------------------------

 

在androi中手机信号信息的获取可以通过系统提供的TELEPHONY_SERVICE获取

 

[java] view plaincopy
 
  1. TelephonyManager tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);  


TelephonyManager 可以监听 PhoneStateListener, PhoneStateListener 提供了

 

 

[java] view plaincopy
 
  1. onSignalStrengthsChanged   手机信号变动  
  2. onServiceStateChanged      手机服务状态变动  


其中onSignalStrengthsChanged可以获取到的有用信息如下:

 

 

[java] view plaincopy
 
  1. /* 
  2.   signalStrength.isGsm()           是否GSM信号 2G or 3G  
  3.   signalStrength.getCdmaDbm();     联通3G 信号强度 
  4.   signalStrength.getCdmaEcio();    联通3G 载干比 
  5.   signalStrength.getEvdoDbm();     电信3G 信号强度 
  6.   signalStrength.getEvdoEcio();    电信3G 载干比 
  7.   signalStrength.getEvdoSnr();     电信3G 信噪比 
  8.   signalStrength.getGsmSignalStrength();  2G 信号强度 
  9.   signalStrength.getGsmBitErrorRate();    2G 误码率 
  10.  
  11.   载干比 ,它是指空中模拟电波中的信号与噪声的比值 
  12. */   

奇怪的是移动的3G信号TD-SCDMA 信息没办法获取到

 

而onServiceStateChanged 提供的状态变动如下:

[java] view plaincopy
 
  1. /* 
  2.   ServiceState.STATE_EMERGENCY_ONLY   仅限紧急呼叫 
  3.   ServiceState.STATE_IN_SERVICE       信号正常 
  4.   ServiceState.STATE_OUT_OF_SERVICE   不在服务区 
  5.   ServiceState.STATE_POWER_OFF        断电 
  6. */  

 

以下给出具体的实例:

1.在布局文件中增加一个3G图标,和显示具体信息的文本  (activity_g3_example.xml)

 

[html] view plaincopy
 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"   
  5.     android:gravity="center"  
  6.     android:orientation="vertical">  
  7.   
  8.     <ImageButton  
  9.         android:id="@+id/Icon_3GStatus"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:src="@drawable/ic_3g"/>  
  13.       
  14.     <TextView  
  15.         android:id="@+id/Label_3GDetail"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:maxWidth="320dp"/>  
  19.   
  20. </LinearLayout>  


2. 为3G图标添加一组可选的图标,在drawable-hdpi目录下增加ic_3g.xml文件,内容如下:

 

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <level-list xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <item android:maxLevel="60"  android:drawable="@drawable/ic_3g_s3" />  
  5.     <item android:maxLevel="90"  android:drawable="@drawable/ic_3g_s2" />  
  6.     <item android:maxLevel="96"  android:drawable="@drawable/ic_3g_s1" />  
  7.     <item android:maxLevel="100" android:drawable="@drawable/ic_3g_s0" />  
  8. </level-list>  


注意需要导入用到的图片

 

 

3.在代码中监听手机信号和状态的变动  (G3Example.java)

[java] view plaincopy
 
  1. package com.example.g3example;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.content.Context;  
  6. import android.telephony.PhoneStateListener;  
  7. import android.telephony.ServiceState;  
  8. import android.telephony.SignalStrength;  
  9. import android.telephony.TelephonyManager;  
  10. import android.util.Log;  
  11. import android.view.Menu;  
  12. import android.widget.ImageButton;  
  13. import android.widget.TextView;  
  14.   
  15. public class G3Example extends Activity {  
  16.   
  17.     private final String TAG = "G3Example";  
  18.   
  19.     private ImageButton       mIcon3G;  
  20.     private TextView          mLabel3G;  
  21.   
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_g3_example);  
  26.   
  27.         mIcon3G  = (ImageButton)findViewById(R.id.Icon_3GStatus);  
  28.         mLabel3G = (TextView)findViewById(R.id.Label_3GDetail);   
  29.   
  30.         TelephonyManager tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);  
  31.         tel.listen(new PhoneStateMonitor(), PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_SERVICE_STATE);  
  32.     }  
  33.   
  34.     @Override  
  35.     public boolean onCreateOptionsMenu(Menu menu) {  
  36.         getMenuInflater().inflate(R.menu.activity_g3_example, menu);  
  37.         return true;  
  38.     }  
  39.   
  40.     public class PhoneStateMonitor extends PhoneStateListener{  
  41.         public void onSignalStrengthsChanged(SignalStrength signalStrength) {  
  42.             super.onSignalStrengthsChanged(signalStrength);  
  43.             /* 
  44.             signalStrength.isGsm()           是否GSM信号 2G or 3G  
  45.             signalStrength.getCdmaDbm();     联通3G 信号强度 
  46.             signalStrength.getCdmaEcio();    联通3G 载干比 
  47.             signalStrength.getEvdoDbm();     电信3G 信号强度 
  48.             signalStrength.getEvdoEcio();    电信3G 载干比 
  49.             signalStrength.getEvdoSnr();     电信3G 信噪比 
  50.             signalStrength.getGsmSignalStrength();  2G 信号强度 
  51.             signalStrength.getGsmBitErrorRate();    2G 误码率 
  52.  
  53.             载干比 ,它是指空中模拟电波中的信号与噪声的比值 
  54.              */   
  55.             mLabel3G.setText("IsGsm : " + signalStrength.isGsm() +   
  56.                     "\nCDMA Dbm : " + signalStrength.getCdmaDbm() + "Dbm" +   
  57.                     "\nCDMA Ecio : " + signalStrength.getCdmaEcio() +  "dB*10" +  
  58.                     "\nEvdo Dbm : " + signalStrength.getEvdoDbm() + "Dbm" +   
  59.                     "\nEvdo Ecio : " + signalStrength.getEvdoEcio() + "dB*10" +   
  60.                     "\nGsm SignalStrength : " + signalStrength.getGsmSignalStrength() +   
  61.                     "\nGsm BitErrorRate : " + signalStrength.getGsmBitErrorRate());  
  62.   
  63.             mIcon3G.setImageLevel(Math.abs(signalStrength.getGsmSignalStrength()));  
  64.         }  
  65.   
  66.         public void onServiceStateChanged(ServiceState serviceState){  
  67.             super.onServiceStateChanged(serviceState);  
  68.   
  69.             /* 
  70.              ServiceState.STATE_EMERGENCY_ONLY   仅限紧急呼叫 
  71.              ServiceState.STATE_IN_SERVICE       信号正常 
  72.              ServiceState.STATE_OUT_OF_SERVICE   不在服务区 
  73.              ServiceState.STATE_POWER_OFF        断电 
  74.              */  
  75.             switch(serviceState.getState())  
  76.             {  
  77.             case ServiceState.STATE_EMERGENCY_ONLY:  
  78.                 Log.d(TAG, "3G STATUS : STATE_EMERGENCY_ONLY");  
  79.                 break;  
  80.             case ServiceState.STATE_IN_SERVICE:  
  81.                 Log.d(TAG, "3G STATUS : STATE_IN_SERVICE");  
  82.                 break;  
  83.             case ServiceState.STATE_OUT_OF_SERVICE:  
  84.                 Log.d(TAG, "3G STATUS : STATE_OUT_OF_SERVICE");  
  85.                 break;  
  86.             case ServiceState.STATE_POWER_OFF:  
  87.                 Log.d(TAG, "3G STATUS : STATE_POWER_OFF");  
  88.                 break;  
  89.             default:  
  90.                 break;  
  91.             }  
  92.         }  
  93.     }  
  94. }  

 

4. 最后在AndroidManifest.xml增加获取手机信号权限的支持

 

[html] view plaincopy
 
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

 

 

分享到:
评论

相关推荐

    Android手机信号强度检测详细介绍

    在Android系统中,检测手机信号强度是通过与设备的无线电通信模块交互来实现的。Android定义了两种衡量信号强度的单位:dBm和asu。dBm是一个表示功率绝对值的单位,通常用来描述无线电信号的强度,而asu是Android...

    android检测信号强度

    这些信息主要包括:手机信号质量、服务状态等。 #### 关键API介绍 1. **TelephonyManager** - **简介**:`TelephonyManager`是Android提供的用于管理电话相关信息的一个系统服务。 - **方法**: - `...

    android信号强度检测

    在Android系统中,信号强度检测是一项重要的功能,它关乎到设备的通信质量,例如手机通话、数据连接等。本文将详细讲解如何在Android平台上实现信号强度的监测,并实时打印出变化情况。 首先,理解Android中的信号...

    android 手机信息、服务器响应参数获取

    获取服务器响应时间、建立连接时间、传送数据时间、下载内容大小等参数 获取本地IP、网关IP ...获取手机信号强度 获取手机接入互联网方式 wifi/2g/3g/4g 1、不需root 2、网络相关信息 保存在 /sdcard/testinfos.txt

    android 3G基站定位(完整源码实例)

    1. **LocationManager**:这是Android系统中用于定位服务的核心组件,它可以获取来自各种定位提供者的地理位置信息,如GPS、Wi-Fi和移动网络基站。 2. **CellInfo**类:该类代表了手机连接到的移动网络基站信息,...

    Android处理手机事件的代码例子

    3. 获取手机信号信息(2G/3G/4G): 通过`TelephonyManager`,你可以获取到网络连接的状态和强度。`getNetworkType()`方法返回当前使用的网络类型,如2G、3G或4G。`getSignalStrength()`(API 17以上)或`...

    关于检测手机信号,wifi信号强度以及获取周围wifi热点的一个小例子

    手机信号通常指的是移动网络(如2G、3G、4G或5G)的信号强度。在Android系统中,我们可以使用`TelephonyManager`类来获取这一信息。通过调用`getSignalStrength()`方法,可以得到一个表示信号强度的整数值。请注意...

    信号强度检测和手机定位安卓程序.rar

    程序使用最新Android Studio 开发设计,可以检测4G,3G,2G,WiFi的信号强度和信号速率,可以手机定位,显示经纬度,海拔,速度,详细的地理位置,时间信息。还可以长ping包测试无线网络是否连续。

    android开发判断2G/3G/WIFI

    在Android中,无法直接获取具体的2G、3G或4G信息,但可以通过一些间接方式推测,比如检查手机的信号强度。不过这通常需要额外的权限,并且不是所有设备都支持。 以下是一个简单的示例,用于判断网络类型: ```java...

    基于安卓5G信号参数获取上报的APP设计与实现.pdf

    在5G部署的过程中,为方便计算机获取与分析5G信号参数,设计了一款基于安卓移动端的5G信号获取上报软件。该安卓软件以手机端为基础,通过5G移动传输网络和内部传输网络为传输途径,实现了5G信号中的重要参数RSRP、...

    Ril_SO.rar_RIL android_RIL for android_android_android智能手机_ril.s

    4. **网络状态报告**:RIL监控并报告网络信号强度、网络类型、网络注册状态等信息,这些信息可供用户界面或应用程序使用。 5. **SIM卡操作**:RIL支持SIM卡的读取和操作,如获取SIM卡信息、鉴权等。 6. **射频控制...

    Android获取当前手机网络类型(2g、3g、4g、wifi)以及手机型号、版本号代码

    在Android开发中,获取设备的网络状态以及手机型号和版本号是常见的需求。这些信息对于开发者来说至关重要,因为它们可以帮助优化应用性能,提供定制化的用户体验,或者根据不同的网络环境进行功能调整。以下将详细...

    ReactNativeiOS和Android的蜂窝网络信号强度_Objective-C_.zip

    在本项目"ReactNativeiOS和Android的蜂窝网络信号强度_Objective-C_"中,重点是实现跨平台获取移动设备的蜂窝网络信号强度,即手机的网络连接质量。 在iOS系统中,Objective-C是主要的开发语言,因此这个项目可能...

    3g dongle文档

    当设备启动时,RIL库会进行初始化,这一过程包括加载必要的驱动程序,注册到网络,获取网络状态信息,并准备处理来自操作系统的各种请求。初始化过程中可能涉及的步骤有: 1. **加载驱动**:RIL库首先需要加载并...

    Android手机查询基站信息及异常频点判断方法说明.docx

    在移动通信领域,Android手机能够获取并查询基站信息,这对于网络优化、故障排查以及了解自身网络环境至关重要。本文将详细阐述如何使用Android手机查询基站信息,并介绍一种异常频点的判断方法。 首先,你需要在...

    SystemUI五格信号图标资源

    在本主题中,"SystemUI五格信号图标资源"指的是SystemUI中的网络信号图标,这些图标通常显示在手机屏幕顶部的状态栏,用于指示手机的网络连接状态,如4G、3G、2G或无服务等。Google原生的信号塔图标设计简洁,易于...

    安卓手机基站数据采集

    "手机信号测试.apk"很可能是用于测试手机信号强度和基站信息的应用程序。此类应用通常会显示以下信息: - RSSI(接收信号强度指示):表示手机接收到的基站信号强度。 - RSRP(参考信号接收功率):3GPP定义的用于...

    Android12版本-telephony-common源码jar

    2. **电话状态监听**:库中包含了用于监听电话状态变化的类,如`PhoneStateListener`,应用可以通过注册监听器来获取网络连接状态、信号强度、来电、去电等信息。 3. **SIM卡管理**:`telephony-common`提供了对SIM...

    Android Tether

    【Android Tether】是一款在Android设备上实现无线热点功能(也称为移动热点或无限AP)的应用,其核心功能是让Android手机或平板电脑共享网络连接,使得其他设备可以通过Wi-Fi接入,共享移动数据或者连接到互联网。...

    25个顶级的Android 应用介绍

    FCC Speedtest是网络测试爱好者的首选应用,无论是测试3G网速稳定性还是评估Wi-Fi信号质量,它都能给出准确的结果。这一功能对于经常更换网络环境的用户来说尤为实用,帮助他们实时了解网络状况,确保通讯畅通无阻。...

Global site tag (gtag.js) - Google Analytics