㈠ 如何获得在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;
}
}
关于信号获取流程,这个还需深入研究,目前只在应用层简单获取了网络信号。
㈡ 安卓Android手机怎么快速查看系统信号强度
手纤答机最大的功能自然是打电话和发短信等基础性电话功能应用,而限制这些功能实用的根本,除了手机自身以外,就是有运营商的网络情况。那么我们能够在自己的Android手机中查看到目前所在网络的信号强度情况吗?
当然可以,Android手机属于智能手机,州竖派能够时事显示出手机的当前状态,手机信号强度当然也不例外,其实系统本身带有显示功能,不用通过第三方的查看工具也能够查看到当前手机信号强度,适合刚接触Android系统的机友了解一下。
步骤/方法
1.进入设置选项,在主屏界面中按下Android手机Menu键,在弹出的进阶菜单中选择最后一项“设置”(英文系统即为"Settings");
2.将滑动条拖动至最下方,点击“关于手机”(英文系统即为"About Phone")分类;
3.选择第二项“状态”(英文系统即为"Status")分类;
4.这时,就能够看到“信号强度”(英文系统即为"Signal Strength")选项,前面的-xx(这是一个负数数字)dBm则是手机信号强度。
5.一般"0"—"-50"之间都是一个非常不错的信号强度,而数值越小则代表着信号越差。册贺
㈢ 安卓手机拨打哪个号码查看手机接收信号强度
1
进入手机的拨号界面,输入 “*#*#4636#*#*”,输入完成后进入手机的测试界面。
2
点开手机信息就可以查看信号强度了。我的手机测试信号是-73dbm,比-90dbm要大很多,表示我的目前信号很好。
3
输入“*#*#4636#*#*”,还可以查看“电池信息和WIFI信息哦。感兴趣的可以试一试!
注意事项
这个方法只在安卓手机上有效哦。
㈣ Android 怎么获取手机网络信号问题
在我们有的时候需要可能需要自己写一个状态栏显示手机的的当前网络类似网络信号的问题这些需求先说说思路吧。
1.这个里面涉及一个核心的api :PhoneStateListener
让某个类继承PhoneStateListener 重写:onSignalStrengthsChanged 通过传入的SignalStrength getLevel()获取信号强度 判断网络是4G还是3G或者是2G 通过TelephoneManager getNetWorkType获取
关于显示移动信号显示就这几个方法,现在需要冬天更改因为手机变化的怎么做呢那么介绍另外一个API:SubscriptionManager
关于SubscriptionManager :
1.对象实例化: SubscriptionManager mSubscriptionManager = SubscriptionManager.from(Conrtext )返回一个实例对象
SubscriptionInfo sub0 = mSubscriptionManager.(0);
if(null != sub0) {
mPhoneStateListener = new Sim1SignalStrengthsListener(sub0.getSubscriptionId());
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
㈤ 怎样用手机测网速 安卓手机测网速的方法推荐
据了解,85%以上的年轻人都是低头族,无论是坐车还是散步都离不开手机,于是手机网速就成为大家关注的问题了,那么, 怎样用手机测网速 呢?下面我们就来详细介绍一下: 怎样用手机测网速 以及安卓手机测网速的方法推荐?希望可以给你们一些帮助和启示!
怎样用手机测网速 :
一:怎样用手机测网速---使用测速工具进行测速
1、要先上网下载一个专用的测速软件,比如:在网络上搜索“网速测试”,便会出现很多软件,要选择口碑比较好的软件下载。
2、等下载好之后,要进行安装,然后打开测速软件,再点击“开始测速”按钮,这样就开始测速了。
3、等测速好之后,就显示你当前的网速。
二:怎样用手机测网速---使用下载件的测速功能进行测速
1、要先下载一个迅雷测速软件,然后打开,再选择“设置”按钮,在弹出的菜单中选择“网速测试”,进入测速页面。
2、在测速页面中,再点击“开始测试”按钮,进行网速的测试。
3、稍等片刻,网速结果就显示出来了。
注意事项:
再测试时,它的结果并不是困定的,而是会根据环境而有所改变。此外,最好在有WiFi时在进行,以免流量超支给自己带来麻烦。
三、怎样用手机测网速---手机测试网速方法
1、在使用手机测试网速时要先下载speedtest应用,然后进行安装,等好了之后,在进行测速或通过手机助手搜索网速测试应用。
2、然后下载安装应用
3、等完成后进入手机界面,进入应用。
4、进入Speedtest应用之后,就能看到Begin Test或开始等字样了,点击开始测试网速即可。
5、等完成之后,进入页面,就能看到当前网络的的PING值以及上行、下载速度了,再点击表盘下方的"Restart Test"按钮就能重新测速了。
注意事项:
有了测速软件之后,就可以随时随地查看手机的网速状况了。
文章总结: 怎样用手机测网速 以及安卓手机测网速的方法推荐的相关知识就介绍到这里了,其实,手机测试网速的方法很简单,只要下载好网速测试软件,再根据软件的提示一步一步完成操作,这样就能了解手机当前的网速状况了。
㈥ android开发怎么判断wifi信号强度
通过WifiManager的方法getScanResults()获取List<ScanResult>的集合,ScanResult.level就是信号强度是个负数,然后使用
WifiManager.calculateSignalLevel(scanResult.level,
100);就可得到确定的信号强度(calculateSignalLevel为计算信号等级函数,MAX_RSSI和MIN_RSSI分别为最强和最弱信号强度等级的信号强度阀值)。