当前位置:首页 » 无线网络 » 安卓网络信号强度
扩展阅读

安卓网络信号强度

发布时间: 2022-01-13 05:21:52

1. 如何获得在Android的LTE信号的强度

Android手机信号强度检测详细介绍
作者:skxy 字体:[增加 减小] 类型:转载 时间:2016-11-17 我要评论
这篇文章主要介绍了Android手机信号强度检测的相关资料,android定义了2种信号单位:dBm和asu。具体两种的关系本文给大家介绍非常详细,需要的朋友可以参考下

最近到处在跑着找工作,难免在面试过程中遇到这样那样的问题,记得最清楚一次在面试过程中被问到,当手机处于弱网状态下,如何处理,如何监听网络信号强度变化。但是真是蒙了,回答的乱七八糟,思路一点都不明确。今天小编在这里带领大家了解下关于手机信号强度的相关几个概念。
Android手机信号强度介绍
android定义了2种信号单位:dBm和asu。它们之间的关系是:dBm =-113+2asu,这是google给android手机定义的特有信号单位。例如,我的信号强度为-53dBm,则对应30asu,因为-53 = -113 + (230) 。
详细介绍两者:
asu:alone signal unit 独立信号单元,是一种模拟信号。ASU仅仅代表手机将它的位置传递给附近的信号塔的速率。它和dBm测量的是一样的东西,但是是以一种更加线性的方式来表示。
dBm:是一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值),计算公式为:10log(功率值/1mw)。
[例] 如果功率P为1mw,折算为dBm后为0dBm。
[例] 对于0.01mW的功率,按dBm单位进行折算后的值应为: 10log(0.01/1)=-20dBm。
这个数值越大,表明信号越好。由于手机信号强度一般较小,折算成为dBm一般都是负数。
中国移动的规范规定,手机接收电平>=(城市取-90dBm;乡村取-94dBm) 时,则满足覆盖要求,
也就是说此处无线信号强度满足覆盖要求.-67dBm要比-90dBm信号要强20多个dB,
那么它在打电话接通成功率和通话过程中的话音质量都会好的多。再引入一个相关概念dB。
dB:是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时,按下面的计算公式:10log(甲功率/乙功率),如果采用两者的电压 比计算,要用20log(甲电压/乙电压)。
[例] 甲功率比乙功率大一倍,那么10lg(甲功率/乙功率)=10lg2=3dB,即甲的功率比乙的功率大3 dB。反之,如果甲的功率是乙的功率的一半,则甲的功率比乙的功率小3 dB。
总结:dBm是负数,越接近0信号强度越高,信号越好,但不可能为0。asu为正数,值越大信号越好。dB是两个量之间的比值,表示两个量间的相对大小,而dBm则是表示功率绝对大小的值。
关于对数运算,不记得的自行复习一下了。
下面再来了解一下网络类型吧,还是很多的,不过在国内只要了解国内三大运营商的网络类型大概就可以了。
电信
2G CDMA
3G CDMA2000
4G TD-LTE,FDD-LTE
移动
2G GSM
3G TD-SCDMA
4G TD-LTE,FDD-LTE
联通
2G GSM
3G WCDMA
4G TD-LTE,FDD-LTE
而谷歌API给我们提供的有19种类型,在TelephonyManager类中定义,具体如下
/** Network type is unknown */
public static final int NETWORK_TYPE_UNKNOWN = 0;
/** Current network is GPRS */
public static final int NETWORK_TYPE_GPRS = 1;
/** Current network is EDGE */
public static final int NETWORK_TYPE_EDGE = 2;
/** Current network is UMTS */
public static final int NETWORK_TYPE_UMTS = 3;
/** Current network is CDMA: Either IS95A or IS95B*/
public static final int NETWORK_TYPE_CDMA = 4;
/** Current network is EVDO revision 0*/
public static final int NETWORK_TYPE_EVDO_0 = 5;
/** Current network is EVDO revision A*/
public static final int NETWORK_TYPE_EVDO_A = 6;
/** Current network is 1xRTT*/
public static final int NETWORK_TYPE_1xRTT = 7;
/** Current network is HSDPA */
public static final int NETWORK_TYPE_HSDPA = 8;
/** Current network is HSUPA */
public static final int NETWORK_TYPE_HSUPA = 9;
/** Current network is HSPA */
public static final int NETWORK_TYPE_HSPA = 10;
/** Current network is iDen */
public static final int NETWORK_TYPE_IDEN = 11;
/** Current network is EVDO revision B*/
public static final int NETWORK_TYPE_EVDO_B = 12;
/** Current network is LTE */
public static final int NETWORK_TYPE_LTE = 13;
/** Current network is eHRPD */
public static final int NETWORK_TYPE_EHRPD = 14;
/** Current network is HSPA+ */
public static final int NETWORK_TYPE_HSPAP = 15;
/** Current network is GSM {@hide} */
public static final int NETWORK_TYPE_GSM = 16;
/** Current network is TD_SCDMA {@hide} */
public static final int NETWORK_TYPE_TD_SCDMA = 17;
/** Current network is IWLAN {@hide} */
public static final int NETWORK_TYPE_IWLAN = 18;

下面通过一些实例来测试一下吧

首先记得加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_wifi_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

实例代码
public class MainActivity extends AppCompatActivity {
private static final int NETWORKTYPE_WIFI = 0;
private static final int NETWORKTYPE_4G = 1;
private static final int NETWORKTYPE_2G = 2;
private static final int NETWORKTYPE_NONE = 3;
public TextView mTextView;
public TelephonyManager mTelephonyManager;
public PhoneStatListener mListener;
/**
* 网络信号强度监听
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textview);
//获取telephonyManager
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//开始监听
mListener = new PhoneStatListener();
//监听信号强度
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);
}
@Override
protected void onResume() {
super.onResume();
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);
}
@Override
protected void onPause() {
super.onPause();
//用户不在当前页面时,停止监听
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_NONE);
}
private class PhoneStatListener extends PhoneStateListener {
//获取信号强度
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
//获取网络信号强度
//获取0-4的5种信号级别,越大信号越好,但是api23开始才能用
// int level = signalStrength.getLevel();
int gsmSignalStrength = signalStrength.getGsmSignalStrength();
//获取网络类型
int netWorkType = getNetWorkType(MainActivity.this);
switch (netWorkType) {
case NETWORKTYPE_WIFI:
mTextView.setText("当前网络为wifi,信号强度为:" + gsmSignalStrength);
break;
case NETWORKTYPE_2G:
mTextView.setText("当前网络为2G移动网络,信号强度为:" + gsmSignalStrength);
break;
case NETWORKTYPE_4G:
mTextView.setText("当前网络为4G移动网络,信号强度为:" + gsmSignalStrength);
break;
case NETWORKTYPE_NONE:
mTextView.setText("当前没有网络,信号强度为:" + gsmSignalStrength);
break;
case -1:
mTextView.setText("当前网络错误,信号强度为:" + gsmSignalStrength);
break;
}
}
}
public static int getNetWorkType(Context context) {
int mNetWorkType = -1;
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
String type = networkInfo.getTypeName();
if (type.equalsIgnoreCase("WIFI")) {
mNetWorkType = NETWORKTYPE_WIFI;
} else if (type.equalsIgnoreCase("MOBILE")) {
return isFastMobileNetwork(context) ? NETWORKTYPE_4G : NETWORKTYPE_2G;
}
} else {
mNetWorkType = NETWORKTYPE_NONE;//没有网络
}
return mNetWorkType;
}
/**判断网络类型*/
private static boolean isFastMobileNetwork(Context context) {
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE) {
//这里只简单区分两种类型网络,认为4G网络为快速,但最终还需要参考信号值
return true;
}
return false;
}
}

关于信号获取流程,这个还需深入研究,目前只在应用层简单获取了网络信号。

2. 如何查看手机信号强度的数值

手机信号强度全解析

1.dB
dB是一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,没有单位,当考虑甲的功率相比于乙功率大或小多少个dB时,
按下面的计算公式:10log(甲功率/乙功率),如果采用两者的电压比计算,要用20log(甲电压/乙电压)。)
[例] 甲功率比乙功率大一倍,那么10lg(甲功率/乙功率)=10lg2=3dB。也就是说,甲的功率比乙的功率大3 dB。
反之,如果甲的功率是乙的功率的一半,则甲的功率比乙的功率小3 dB。

2.dBm
dBm是一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值),计算公式为:10log(功率值/1mw)。
[例] 如果功率P为1mw,折算为dBm后为0dBm。
[例] 对于40W的功率,按dBm单位进行折算后的值应为:
10log(40W/1mw)=10log(40000)=10log4+10log10000=46dBm。
总之,dB是两个量之间的比值,表示两个量间的相对大小,而dBm则是表示功率绝对大小的值。在dB,dBm计算中,要注意基本概念,
用一个dBm减另外一个dBm时,得到的结果是dB,如:30dBm - 0dBm = 30dB。

3.手机信号强度表示
好了,那么手机上显示的数字的单位是那个呢,是dBm。当你仔细看的时候会发现这个值是负的,也就是说手机会显示比如 -67(dBm),那就说明信号很强了。

一个小知识:
中国移动的规范规定,手机接收电平>=(城市取-90dBm ;乡村取 -94dBm )时,则满足覆盖要求,也就是说此处无线信号强度满足覆盖要求。
-67dBm 要比-90dBm 信号要强20多个dB ,那么它在打电话接通成功率和通话过程中的话音质量都会好的多(当然也包括EDGE/GPRS上网的速度那些 )

所以,那个值越大信号就越好,因为那是个负值,而且它永远是负值 ,如果感兴趣且附近有无线基站的天线的话,可以把手机尽量接近天线面板,那么值就越来越大,如果手机跟天线面板挨到一起,那么它可能十分接近于0了(0是达不到的,这里的0的意思不是说手机没信号了。)

在信号强度计选择工程模式,显示了很多参数,只要看BCCHLev(控制信道电平值)它就是手机的信号强度值,单位dBm,多大的信号手机可以正常接听呢,BCCHLev-C1,C1也有显示数值,如:BCCHLev(-63) ,C1(34),表示手机在信号大于-97dBm的状况下是不会掉话的。

再来看手机发射功率要多大才合适呢,按GSM协议规定,手机发射功率是可以被基站控制的。基站通过下行SACCH信道,发出命令控制手机的发射功率级别,
每个功率级别差2dB;
GSM900 手机最大发射功率级别是5(2W=2000mw,33dBm),最小发射功率级别是19(3mw,5dBm),
DCS1800手机最大发射功率级别是0(1W,30dBm),最小发射功率级别是15(1mW,0dBm)。
当手机远离基站,或者处于无线阴影区时,基站可以命令手机发出较大功率,直至33dBm(GSM900),
以克服远距离传输或建筑物遮挡所造成的信号损耗。

强度计里的TXPower就是手机发射功率,在拨打电话的状态下可以看出手机发射功率,也就是数值越大越省电,辐射越小,数值在5,电话耗电大电池用不了一天,通话时别人经常听不到声音,手机经常会突然没信号,会掉话,这样可以打投诉电话让运营商来做信号覆盖,让手机信号好起来,减少辐射。

以上那么多字,只有一个核心意思。不要被手机信号还有多少格欺骗!!!那都是手机厂商自己定义的。咱要玩专业点的,直接看信号强度dBm。
android系统查信号强度在设置—关于手机—网络里。

室内和室外的信号强度是有差距的。一般室外信号比室内好。
现在来看这个所谓的dBm,数值范围在-XX~0之间。这个数越大,信号强度越高。

-50dBm~0dBm范围内,信号已经好得很了。
-90dBm~-60dBm,基本不会面临打不了电话的问题。如果打不了的,找运营商。

G室内,DS放桌上信号强度-67dBm,23asu。作打电话状握手里,-75dBm,19asu。调整各种姿势,看到的最低是-83dBm,15asu。

这属于什么等级呢?简单说就是,信号很不错。室外没看,但肯定比这个高,至于其他手机,可以自己上网去看,和DS的dBm值大多在一个档次。有同志炫耀自己大于-50dBm的,都是因为他就在基站边上。正常的范围是-90dBm~-60dBm。

3. 安卓Android系统快速查看系统信号强度

手机最大的功能自然是打电话和发短信等基础性电话功能应用,而限制这些功能实用的根本,除了手机自身以外,就是有运营商的网络情况。那么我们能够在自己的Android手机中查看到目前所在网络的信号强度情况吗?

当然可以,Android手机属于智能手机,能够时事显示出手机的当前状态,手机信号强度当然也不例外,其实系统本身带有显示功能,不用通过第三方的查看工具也能够查看到当前手机信号强度,适合刚接触。

Android系统的机友了解一下。

1、进入设置选项,在主屏界面中按下Android手机Menu键,在弹出的进阶菜单中选择最后一项“设置”(英文系统即为"Settings"

2、将滑动条拖动至最下方,点击“关于手机”(英文系统即为"About
Phone")分类。

3、选择第二项“状态”(英文系统即为"Status")分类。

4、这时,就能够看到“信号强度”(英文系统即为"Signal
Strength")选项,前面的-xx(这是一个负数数字)dBm则是手机信号强度。

5、一般"0"—"-50"之间都是一个非常不错的信号强度,而数值越小则代表着信号越差。

4. 安卓手机怎么设置wifi信号弱的问题

无线路由器放置的位置和周围的环境会直接影响到路由器的信号强弱度。

一、无线设备的WIFI信号强度将会对网络传输速率造成直接的影响。如果信号质量太差给人最直观的感觉就是网速慢和卡。实际上,Wi-Fi信号差除了热点(AP或者无线路由器)的本身的问题外,还受制于其他的一些因素。

5. 移动4g信号强度范围是多少

移动4g卡手机信号强度数值在-75dBm到-85dBm之间属于正常范围。

移动4g卡信号强度详细介绍:

移动4g卡手机对信号定义了两个表示单位,一个是dBm,另外一个是asu。

我们通常提到最多的是dBm的表示方法,在手机硬件没有问题的情况下,信号强度数值在-75dBm到-85dBm之间属于正常范围,该数值内手机接听拨打电话都不会出现问题。信号强度数值在-85dBm到-95dBm之间时手机信号格数往往就不再是满格状态,但手机通话还是没有问题。

而数值在-100dBm到-110dBm之间时说明手机的信号已经比较弱,此时如果用户拨打电话恰好遇到从一个信号基站移动到另外一个信号基站时就会出现手机通话中断的情况。而在-110dBm以下手机基本处于无服务状态,拨打电话肯定会出现掉线情况。

(5)安卓网络信号强度扩展阅读:

4G网络的理论最高速度能达到100Mbps,约为12.5M/秒。但在实际使用过程中,受限于信号强度、基站损耗、手机的信号接入能力等各种因素的影响,一般在1-2M/S左右。

第四代移动电话行动通信标准,指的是第四代移动通信技术,外语缩写:4G。4G能够以100Mbps以上的速度下载,比目前的家用宽带ADSL(4兆)快25倍,并能够满足几乎所有用户对于无线服务的要求。

6. 如何测量Android手机的信号强度

在你手机屏幕上方显示的信号条永远不会是最好的方法来确定你手机的信号,无论你用什么手机都一样。Android也是,用很粗的条来展示很强的信号,但这些条仅仅表示最高的信号。或许你并不熟悉,信号通常是以dBm度量的。dBm是每毫瓦特的电磁波产生的功率。-60dBm的信号接近完美,-112dBm就很容易掉线,如果你在 -87dBm以上,Android会显示一个4格的满信号。

如果你想查看信号的原始数据,你可以查看Android菜单的状态屏幕。只要拉起菜单,向下滚动,选择关于手机,然后选择状态。在这个屏幕上,你将能看到你的信号以dBm 或者AUS的形式呈现。ASU仅仅代表手机将它的位置传递给附近的信号塔的速率。它和dBm测量的是一样的东西,但是是以一种更加线性的方式来表示。你可以用这个公式将ASU转换成dBm:dBm=-113+(2*ASU)。

所以如果你看这些数字的话将会对屏幕上方那个模糊的长条有更深刻的理解。另一种确定你想要什么类型信号的方式是观察你离信号塔有多远。用Android商店里一个叫天线的应用,你可以看到一张地图,你手机能搜到的所有信号塔的位置都在上面。你可以知道朝向哪个方向才能得到最好的信号覆盖。

当你在3G网络时,这个应用会受到Android中一些 API的限制。多数运行商在同一个城镇都同时有2G和3G设备,所以为了防止探测混乱,这个应用只能在2G中工作;它在网络连接菜单里。天线能用ASU来向你展示你手机从周围各个信号塔可以得到的相近信号(如果你想获得dBm的值,你必须转化它)。在3G网中,它只能向你展示手机正连接着的信号塔的信号强弱,但在2G网络里,它会向你展示周围所有信号塔的信号强弱。不幸的是,CDMA像3G一样受到限制,所以在Sprint和 Verizon的网络中你也得不到更多的信息。

然后该怎么办呢?

或许你已经用上述的方法测试过你所在地的信号强度了,然后发现 Android的信号显示条并不精确。或许你发现自己在一个信号覆盖很好的地方,并且希望当你离开那时,希望得到更多的警告。此时,在-88dBm处第一格才会消失的信号提示没什么用处。你可以使用一个应用来展示你自己定制的方便查看的信号强度显示。叫做真实信号的应用会在信号条处展示一个5格的信号提示。

没有管理员权限你是无法替换标准的Android信号条的,但是你可以培养自己看左上方而不是右上方的习惯。真实信号会让你用ASU来给每个条划分数值。如果你向下拉提示条,它将会展示当前时刻的ASU和应用启动后ASU的最高和最低值。这项服务开启关闭可以随你所愿。对于那些不相信系统自带信号显示条的人来说这是一个相当好的选择。

Nexus One会有“握死”现象吗?

现在许多的手机把天线放在话筒的底部,Nexus One也不例外。这是由FCC测试手机输出功率的方式决定的。他们通常把手机放在一个人头部类似物的旁边,然后测量从话筒处传来的能量。将天线安置在底部意味着传感器会探测到最少的电磁波。知道这些后,那是否有握**在使用Nexus One的时候使信号消失呢?

我们首先测试了将手机平放在桌子上时的信号。在HSDPA(3G)中,显示-91dBm,11ASU。你的初始信号差不多也会是这样。用一个苹果认可的手机套来握住Nexus One,不要触摸手机的表面,我们看到信号没有明显的减弱。用手盖住手机底部的一半是种更自然的握资,但这确实会影响信号。信号在-101dBm和 -98dBm之间往返,所有这些仍旧在3G信号中测试。

在信号转到EDGE之前,在“握死”下的信号强度

采用一种更极端的方式,我们用双手握住手机的一半,包括整个底部。几秒钟后,3G信号显示在-101dBm至 -111dBm之间,然后掉到0。在那时,EDGE服务开始生效。即使我们超越了信号测量仪的测量界限,3G标志仍旧没有消失,因为软件启动了向EDGE 网络的连接。我们觉得在信号为0时还是有可能获得一些数据的,但是语音就是另一回事了。我们决定尝试手机只连接3G网络,然后试着通过用双手来包裹手机来使电话掉线。

我们用测试语气拨打了一个号码然后开始覆盖住手机(PS:我们不确定那个电话是免费的,但是我们还是冒险了)。和预期的一样,任何用一只手来握手机的正常方式都没问题。当我们把手机夹在两只手中间的时候,电话在大概10秒后掉线了。在不关闭2G网络的情况下我们又试了一次,这次通话在2G网络上继续了,其间没有间断。所以,你可以使Nexus One的3G信号消失,但这需要两只手。

现在无论身处何地我们都在使用智能手机。正因如此,我们希望无论我们在哪它们都能正常工作。但悲哀的是,3G信号比我们期望的要少得多(在美国)。即使生活在大城市的郊区,信号都可能很弱。在你希望得到某种程度的服务前,最好先弄清楚你在使用什么工作。幸运的是,在 Android上你不必相信手机的信号条。你有工具,包括第三方的,可以帮助你掌握真实情况。

7. 安卓手机查看信号强度代码

1.进入设置选项,在主屏界面中按下Android手机Menu键,在弹出的进阶菜单中选择最后一项“设置”(英文系统即为"Settings");
2.将滑动条拖动至最下方,点击“关于手机”(英文系统即为"About
Phone")分类;
3.选择第二项“状态”(英文系统即为"Status")分类;
4.这时,就能够看到“信号强度”(英文系统即为"Signal
Strength")选项,前面的-xx(这是一个负数数字)dBm则是手机信号强度。
5.一般"0"—"-50"之间都是一个非常不错的信号强度,而数值越小则代表着信号越差。