转于:http://blog.csdn.net/hanvy_xia/article/details/8003185
-----------------------------------------------------------------------------------------
在androi中手机信号信息的获取可以通过系统提供的TELEPHONY_SERVICE获取
- TelephonyManager tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
TelephonyManager 可以监听 PhoneStateListener, PhoneStateListener 提供了
- onSignalStrengthsChanged 手机信号变动
- onServiceStateChanged 手机服务状态变动
其中onSignalStrengthsChanged可以获取到的有用信息如下:
- /*
- 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 误码率
- 载干比 ,它是指空中模拟电波中的信号与噪声的比值
- */
奇怪的是移动的3G信号TD-SCDMA 信息没办法获取到
而onServiceStateChanged 提供的状态变动如下:
- /*
- ServiceState.STATE_EMERGENCY_ONLY 仅限紧急呼叫
- ServiceState.STATE_IN_SERVICE 信号正常
- ServiceState.STATE_OUT_OF_SERVICE 不在服务区
- ServiceState.STATE_POWER_OFF 断电
- */
以下给出具体的实例:
1.在布局文件中增加一个3G图标,和显示具体信息的文本 (activity_g3_example.xml)
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical">
- <ImageButton
- android:id="@+id/Icon_3GStatus"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_3g"/>
- <TextView
- android:id="@+id/Label_3GDetail"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxWidth="320dp"/>
- </LinearLayout>
2. 为3G图标添加一组可选的图标,在drawable-hdpi目录下增加ic_3g.xml文件,内容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="60" android:drawable="@drawable/ic_3g_s3" />
- <item android:maxLevel="90" android:drawable="@drawable/ic_3g_s2" />
- <item android:maxLevel="96" android:drawable="@drawable/ic_3g_s1" />
- <item android:maxLevel="100" android:drawable="@drawable/ic_3g_s0" />
- </level-list>
注意需要导入用到的图片
3.在代码中监听手机信号和状态的变动 (G3Example.java)
- package com.example.g3example;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Context;
- import android.telephony.PhoneStateListener;
- import android.telephony.ServiceState;
- import android.telephony.SignalStrength;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.view.Menu;
- import android.widget.ImageButton;
- import android.widget.TextView;
- public class G3Example extends Activity {
- private final String TAG = "G3Example";
- private ImageButton mIcon3G;
- private TextView mLabel3G;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_g3_example);
- mIcon3G = (ImageButton)findViewById(R.id.Icon_3GStatus);
- mLabel3G = (TextView)findViewById(R.id.Label_3GDetail);
- TelephonyManager tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
- tel.listen(new PhoneStateMonitor(), PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_SERVICE_STATE);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_g3_example, menu);
- return true;
- }
- public class PhoneStateMonitor extends PhoneStateListener{
- public void onSignalStrengthsChanged(SignalStrength signalStrength) {
- 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 误码率
- 载干比 ,它是指空中模拟电波中的信号与噪声的比值
- */
- mLabel3G.setText("IsGsm : " + signalStrength.isGsm() +
- "\nCDMA Dbm : " + signalStrength.getCdmaDbm() + "Dbm" +
- "\nCDMA Ecio : " + signalStrength.getCdmaEcio() + "dB*10" +
- "\nEvdo Dbm : " + signalStrength.getEvdoDbm() + "Dbm" +
- "\nEvdo Ecio : " + signalStrength.getEvdoEcio() + "dB*10" +
- "\nGsm SignalStrength : " + signalStrength.getGsmSignalStrength() +
- "\nGsm BitErrorRate : " + signalStrength.getGsmBitErrorRate());
- mIcon3G.setImageLevel(Math.abs(signalStrength.getGsmSignalStrength()));
- }
- public void onServiceStateChanged(ServiceState serviceState){
- super.onServiceStateChanged(serviceState);
- /*
- ServiceState.STATE_EMERGENCY_ONLY 仅限紧急呼叫
- ServiceState.STATE_IN_SERVICE 信号正常
- ServiceState.STATE_OUT_OF_SERVICE 不在服务区
- ServiceState.STATE_POWER_OFF 断电
- */
- switch(serviceState.getState())
- {
- case ServiceState.STATE_EMERGENCY_ONLY:
- Log.d(TAG, "3G STATUS : STATE_EMERGENCY_ONLY");
- break;
- case ServiceState.STATE_IN_SERVICE:
- Log.d(TAG, "3G STATUS : STATE_IN_SERVICE");
- break;
- case ServiceState.STATE_OUT_OF_SERVICE:
- Log.d(TAG, "3G STATUS : STATE_OUT_OF_SERVICE");
- break;
- case ServiceState.STATE_POWER_OFF:
- Log.d(TAG, "3G STATUS : STATE_POWER_OFF");
- break;
- default:
- break;
- }
- }
- }
- }
4. 最后在AndroidManifest.xml增加获取手机信号权限的支持
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
相关推荐
在Android系统中,检测手机信号强度是通过与设备的无线电通信模块交互来实现的。Android定义了两种衡量信号强度的单位:dBm和asu。dBm是一个表示功率绝对值的单位,通常用来描述无线电信号的强度,而asu是Android...
这些信息主要包括:手机信号质量、服务状态等。 #### 关键API介绍 1. **TelephonyManager** - **简介**:`TelephonyManager`是Android提供的用于管理电话相关信息的一个系统服务。 - **方法**: - `...
在Android系统中,信号强度检测是一项重要的功能,它关乎到设备的通信质量,例如手机通话、数据连接等。本文将详细讲解如何在Android平台上实现信号强度的监测,并实时打印出变化情况。 首先,理解Android中的信号...
获取服务器响应时间、建立连接时间、传送数据时间、下载内容大小等参数 获取本地IP、网关IP ...获取手机信号强度 获取手机接入互联网方式 wifi/2g/3g/4g 1、不需root 2、网络相关信息 保存在 /sdcard/testinfos.txt
1. **LocationManager**:这是Android系统中用于定位服务的核心组件,它可以获取来自各种定位提供者的地理位置信息,如GPS、Wi-Fi和移动网络基站。 2. **CellInfo**类:该类代表了手机连接到的移动网络基站信息,...
3. 获取手机信号信息(2G/3G/4G): 通过`TelephonyManager`,你可以获取到网络连接的状态和强度。`getNetworkType()`方法返回当前使用的网络类型,如2G、3G或4G。`getSignalStrength()`(API 17以上)或`...
手机信号通常指的是移动网络(如2G、3G、4G或5G)的信号强度。在Android系统中,我们可以使用`TelephonyManager`类来获取这一信息。通过调用`getSignalStrength()`方法,可以得到一个表示信号强度的整数值。请注意...
程序使用最新Android Studio 开发设计,可以检测4G,3G,2G,WiFi的信号强度和信号速率,可以手机定位,显示经纬度,海拔,速度,详细的地理位置,时间信息。还可以长ping包测试无线网络是否连续。
在Android中,无法直接获取具体的2G、3G或4G信息,但可以通过一些间接方式推测,比如检查手机的信号强度。不过这通常需要额外的权限,并且不是所有设备都支持。 以下是一个简单的示例,用于判断网络类型: ```java...
在5G部署的过程中,为方便计算机获取与分析5G信号参数,设计了一款基于安卓移动端的5G信号获取上报软件。该安卓软件以手机端为基础,通过5G移动传输网络和内部传输网络为传输途径,实现了5G信号中的重要参数RSRP、...
4. **网络状态报告**:RIL监控并报告网络信号强度、网络类型、网络注册状态等信息,这些信息可供用户界面或应用程序使用。 5. **SIM卡操作**:RIL支持SIM卡的读取和操作,如获取SIM卡信息、鉴权等。 6. **射频控制...
在Android开发中,获取设备的网络状态以及手机型号和版本号是常见的需求。这些信息对于开发者来说至关重要,因为它们可以帮助优化应用性能,提供定制化的用户体验,或者根据不同的网络环境进行功能调整。以下将详细...
在本项目"ReactNativeiOS和Android的蜂窝网络信号强度_Objective-C_"中,重点是实现跨平台获取移动设备的蜂窝网络信号强度,即手机的网络连接质量。 在iOS系统中,Objective-C是主要的开发语言,因此这个项目可能...
当设备启动时,RIL库会进行初始化,这一过程包括加载必要的驱动程序,注册到网络,获取网络状态信息,并准备处理来自操作系统的各种请求。初始化过程中可能涉及的步骤有: 1. **加载驱动**:RIL库首先需要加载并...
在移动通信领域,Android手机能够获取并查询基站信息,这对于网络优化、故障排查以及了解自身网络环境至关重要。本文将详细阐述如何使用Android手机查询基站信息,并介绍一种异常频点的判断方法。 首先,你需要在...
在本主题中,"SystemUI五格信号图标资源"指的是SystemUI中的网络信号图标,这些图标通常显示在手机屏幕顶部的状态栏,用于指示手机的网络连接状态,如4G、3G、2G或无服务等。Google原生的信号塔图标设计简洁,易于...
"手机信号测试.apk"很可能是用于测试手机信号强度和基站信息的应用程序。此类应用通常会显示以下信息: - RSSI(接收信号强度指示):表示手机接收到的基站信号强度。 - RSRP(参考信号接收功率):3GPP定义的用于...
2. **电话状态监听**:库中包含了用于监听电话状态变化的类,如`PhoneStateListener`,应用可以通过注册监听器来获取网络连接状态、信号强度、来电、去电等信息。 3. **SIM卡管理**:`telephony-common`提供了对SIM...
【Android Tether】是一款在Android设备上实现无线热点功能(也称为移动热点或无限AP)的应用,其核心功能是让Android手机或平板电脑共享网络连接,使得其他设备可以通过Wi-Fi接入,共享移动数据或者连接到互联网。...
FCC Speedtest是网络测试爱好者的首选应用,无论是测试3G网速稳定性还是评估Wi-Fi信号质量,它都能给出准确的结果。这一功能对于经常更换网络环境的用户来说尤为实用,帮助他们实时了解网络状况,确保通讯畅通无阻。...