是不是手机发烫就会没信号与服务早晨起来信号就会自己从4g跳3g再跳2g,WiFi和移动数据都连接不上,怎么回事吖?

判断当前手机网络连接类型wifi-2G-3G-4G - 简书
判断当前手机网络连接类型wifi-2G-3G-4G
网络类型typedef enum {NETWORK_TYPE_NONE= 0,NETWORK_TYPE_2G= 1,NETWORK_TYPE_3G= 2,NETWORK_TYPE_4G= 3,NETWORK_TYPE_5G= 4,//
5G目前为猜测结果NETWORK_TYPE_WIFI= 5,}NETWORK_TYPE;+(NETWORK_TYPE)getNetworkTypeFromStatusBar {UIApplication *app = [UIApplication sharedApplication];NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];NSNumber *dataNetworkItemView =for (id subview in subviews) {if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]])
{dataNetworkItemView =}}NETWORK_TYPE nettype = NETWORK_TYPE_NONE;NSNumber * num = [dataNetworkItemView valueForKey:@"dataNetworkType"];nettype = [num intValue];}
一个人建立知识体系分为5个阶段,分别是获取阶段,整理阶段,分享阶段,利用阶段,创新阶段。
Reachability类的学习 简介 Reachability类是Apple官方出的判断当前网络状况的工具类,这个库一直在随着iOS的版本在更新,目前iOS10对应的最新版本是5.0 官方说明文档分为四部分 简介 The Reachability sample appli...
(http://upload-images.jianshu.io/upload_images/a0fd650cb43047.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 按照提示的去操作似...
遍历UIStatusBar获取信号类型 - (void)getNetworkType { UIApplication *app = [UIApplication sharedApplication]; NSArray *subviews = [[[app valueForK...
UITableView的Group样式下顶部空白处理//分组列表头部空白处理UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)];self.tableView.tableHeaderVi...
1.App****名称的修改许多个人开发者或许会有和我一样的经历,开发一个App途中会想到更合适的名字,这时候变会修改工程名以达到App名称改变的目的,其实你可以一步到位——在info.plist中添加一个key(Bundle display name),Value就是你需...
年少时,夜不能寐,有你 现在呢,辗转难眠,想你
“世界是你们的,也是我们的,但是归根结底是你们的。” 日,毛泽东在莫斯科大学对中国留学生讲出这番教导时,他未曾想到,时光如琥珀,曾经的苏维埃政府和共产主义,正在这一代代年轻人的思想里变愈发中性和淡漠。 莫斯科的天气,那么阴冷。坐车到位于城市西南的列宁山,...
在评估问题和意见时,一定更要把人与他所提出的见解分开。 前段时间,一位自媒体大咖去大学做演讲,结果演讲做完,学生很受伤。不少学生愤慨地指责该大咖“不尊重学生、傲慢、智商碾压、炫耀”。到底怎么回事儿呢? 1 演讲者谈被动学习和主动学习的区别。 为了举例,他临时选中了一位学英语...
感恩,今天早上上班在车上吃早餐,雨伞忘记拿。下车时发现,车已经开走了。上班时,我和我的工友小文说,他马上说:我那边有好几根,就拿了一把给我,很感恩! 感恩,今天去菜市场买了两只螃蟹煮给我女儿吃,她吃得很开心!感谢主赞美神!
2017不想再一成不变 2016年初的时候信誓旦旦立下的目标,回头看看竟然没有几个是达成的。 健身,养一只猫,跑步,写作,读书,减肥。 这些看起来既充实又正能量的字眼就随着时间的流逝被消磨了,心里依然是空荡荡的,无所事事,空虚的心灵似乎永远都填不满,那就疯狂的用美食去填充,...Android Network --判断网络状态(网络的连接,改变,和判断2G/3G/4G)
现在app大多都需要从网络上获得数据。所以访问网络是在所难免。但是再访问网络之前,我们应该先做一下网络的状态判断。其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Http访问网络即可。很多人在开发就经常把网络这块直接跳过,直接访问网络,可以一断网,各种体验效果不好,不是说app没法用,只是体验效果差。还有,就是我们可能为用户考虑,因为现在一般连网是wifi和手机流量,都知道后者收费是比较高的。假如我们的app加载的图片或者有大的数据下载操作,可是用户的本意是要是在流量下的话就不要操作这些很费流量的的操作,这样就必须要我们做一些连网状态的判断。网络是否连接良好,连接的wifi还是流量,断网或者网络改变了的时候怎么做,这都是一些细节,但是要注意处理。
我们在做访问的时候都得进行判断是否连网。判断连网也比较简单,就用到了两个类。ConnectivityManager和NetworkInfo。
只要执行下面的代码就可以了。
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConn = networkInfo.isConnected();
networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();
只要有一个连接就是有网,NetworkInfo就是网络的信息。还有一种更简便的判断是否连网的方法。
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
在一个就是监听网络变化,就是设置一个广播。
注册广播,监听ConnectivityManager.CONNECTIVITY_ACTION这个action
IntentFilter filter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
receiver = new NetworkReceiver();
context.registerReceiver(receiver, filter);
再实现一个广播类就可以了。这样网络一变化,就会受到广播,然后执行对应操作了。
public class NetworkReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.i(&TAG&, &intent============&&&&& + intent.toString());
下面就是来说一下判断手机网络的类型了,2G,3G,4G
关于网络类型,在得到networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);这个后,确定是手机网络后,通过networkInfo.getSubtype()会得到网络的类型,用networkInfo.getSubtypeName()会得到网络的名字。
我们通过这个networkInfo.getSubtype()得到的类型来判断当前是什么网络。
其实,的Api中已经定义了各种网络状态,不是在ConnectivityManager里面定义的,而是在TelephonyManager里面的定义的。通过不同的api版本的修改,目前增加到了14个状态值:
下面是通过自己查资料,和看别人查资料实验得来的。整理如下:
--------------------Added in API level 1---------------------
public static final int NETWORK_TYPE_UNKNOWN
Network type is unknown
Constant Value: 0 (0x)
(不知道网络类型)
public static final int NETWORK_TYPE_GPRS
Current network is GPRS
Constant Value: 1 (0x)
(2.5G)移动和联通
public static final int NETWORK_TYPE_EDGE
Current network is EDGE
Constant Value: 2 (0x)
(2.75G)2.5G到3G的过渡
移动和联通
public static final int NETWORK_TYPE_UMTS
Current network is UMTS
Constant Value: 3 (0x)
-----------------Added in API level 4---------------------
public static final int NETWORK_TYPE_CDMA
Current network is CDMA: Either IS95A or IS95B
Constant Value: 4 (0x)
public static final int NETWORK_TYPE_EVDO_0
Current network is EVDO revision 0
Constant Value: 5 (0x)
( 3G )电信
public static final int NETWORK_TYPE_EVDO_A
Current network is EVDO revision A
Constant Value: 6 (0x)
(3.5G) 属于3G过渡
public static final int NETWORK_TYPE_1xRTT
Current network is 1xRTT
Constant Value: 7 (0x)
---------------------Added in API level 5--------------------
public static final int NETWORK_TYPE_HSDPA
Current network is HSDPA
Constant Value: 8 (0x)
public static final int NETWORK_TYPE_HSUPA
Current network is HSUPA
Constant Value: 9 (0x)
public static final int NETWORK_TYPE_HSPA
Current network is HSPA
Constant Value: 10 (0x0000000a)
( 3G )联通
--------------------------Added in API level 8-------------------------
public static final int NETWORK_TYPE_IDEN
Current network is iDen
Constant Value: 11 (0x0000000b)
--------------------------Added in API level 9-------------------------
public static final int NETWORK_TYPE_EVDO_B
Current network is EVDO revision B
Constant Value: 12 (0x0000000c)
--------------------------Added in API level 11------------------------
public static final int NETWORK_TYPE_LTE
Current network is LTE
Constant Value: 13 (0x0000000d)
public static final int NETWORK_TYPE_EHRPD
Current network is eHRPD
Constant Value: 14 (0x0000000e)
3G(3G到4G的升级产物)
--------------------------Added in API level 13---------------------------
public static final int NETWORK_TYPE_HSPAP
Current network is HSPA+
Constant Value: 15 (0x0000000f)
所以我们可以networkInfo.getSubtype()得到值和上面的进行对应,就知道目前是几G网络了。由于手里的手机卡有限,所以有些不全,欢迎大家补充,共享。网速真快!360随身WiFi 4G版体验评测
出处: 泡泡网原创 && 作者:宋海健&&
&&&&泡泡网手机频道6月23日 此前360推出了硬件产品360随身WiFi,该产品推出后倍受好评,此后360吸取大众的建议推出了360随身WiFi的U盘版,不仅解决了驱动问题,同时又能随身携带资料。不过360的脚步从未停歇,不久前又悄然的发布了一款360随身WiFi 4G版,那么同样的作为一款上网辅助设备,360随身WiFi 4G版究竟如何呢?现在我们就来好好了解下这款产品。
  据官方介绍360随身WiFi&&4G版采用大唐联芯4G芯片,支持4G TD-LTE网络,理论下载速度可达到每秒18.75M,比常规的电信3G、移动3G网速要快上50倍,对于经常出差、参加聚会,需要随时上网收发邮件、传递资料或参加视频会议的商务人士来说,兼职是随身必备的利器。好了,我们先从外观说起。
  外观篇:
  360随身WiFi 4G版的外包装十分简洁,正面并没有过于花哨的介绍,有的仅是产品本身的外观图片,顶部的“+”号标识表明了其正统的身份。
  背部是常规的一些规格参数,可以看到360随身WiFi 4G版支持3个网络模式6个工作频段,也就是说这是一款支持中国移动4G/3G/2G、联通2G的随身WiFi,可不仅仅是支持移动4G网络这么简单喔。
  360随身WiFi 4G版的内部包装也十分紧凑,没有多余的点缀,“主角”放置在中间位置,底部为micro-USB的充电线、电池与说明书。
配备2200毫安时可拆卸式电池
  有同学会产生疑问了,这电池是干嘛用的?答案是这个电池是给它提供电源的支持,360随身WiFi不同于普通的无线上网卡,它不需要借助电脑的USB通过与电脑的连接才能提供上网的服务,所以它配备独立的电池,这是必须的。而这个2200毫安时的电池比普通的智能手机电池都要高。
支持标准的SIM上网卡接口,无须剪卡即可使用
  360随身WiFi 4G版的内部是可拆开的。而如刚刚所说,它是一款支持移动4G/3G/2G等网络的随身WiFi设备,所以其内部需要插入网络SIM卡才能使用,这可不是普通的联通、电信3G的上网卡可以比的,移动4G的网络传输速度要比3G快上许多倍,绝对是飞一般的体验,后续我们会讲解。
  插入SIM、电池,即可使用了。在这里还注意到,电池仓的右侧有两个小的按钮,分别是Reset、WPS按钮,与一般的家用路由器相差不多,能实现重置设备和一键加密的技术。
  360随身WiFi的机身采用了磨砂式设计,整体手感非常不错。
  底部配有micro-USB的数据与充电接口,与目前的Android智能手机互相通用,也就是说,不必再担心电源充电的问题了。
  机身正面的大“+”号是可以按下去的,通过长按后可对360随身WiFi 4G版进行开机操作,“+”号周围带有LED的提示灯。下方分别是网络信号、WiFi信号、电量提醒、SIM卡短信提醒的指示灯,纯绿色的背景灯显得格外抢眼。下方为产品Logo。外观整体来说简洁大气,同时功能又非常齐全。
  功能篇:
  长按开启360随身WiFi 4G版后,通过电脑与其想连接,无线网络默认的初始密码为“”,输入后连接即可上网,整个过程与连接普通路由器的操作方式一样。而如果想对360随身WiFi 4G版进行管理,那么在与其连接后在浏览器中输入192.168.8.1,进行管理。初始界面可看到随身WiFi的运行状态,以及电池和网络信息等等。
  当然,虽然4G网络速度飞快,但在有时还需要节省电量和流量的情况,在设置中还可以选择网络,可选择只在4G网络、3G与2G网络等等工作模式的选择,已达到节省流量的目的。
  而如果此时你的流量比较拮据,那么你还可以设置流量提醒,通过设置套餐的总体流量和已用的流量,再设置一下最低剩余的提醒流量,即可进行流量提醒的目的。如果此时流量不足,那么360随身WiFi 4G版就会通过闪灯进行提醒。
  WLAN配置,顾名思义就是管理360随身WiFi的主要配置,比如更改网络名称、更改连接360随身WiFi的连接密码等等,非常便捷,相信用过家用无线路由器的同学上手会很快。
  360随身WiFi 4G版是需要通过插入SIM上网卡才能工作并使用,当然,他并不局限于上网卡,普通的手机卡也同样插入使用。在工作期间如果有人给你发信息,在普通的无线上网卡中查看比较困难,而360随身WiFi 4G版通过进入管理即可快速查看短信的通知,不只如此,还能通过它进行短信回复,非常便捷。
  生活中我们会经常遇到被人蹭网的问题,偶尔的还好,如果长期被蹭网那势必会大量使用我们的流量,使本来就比较拮据的流量更不够用,再者连接的人数过多,还会对360随身WiFi的续航有一定的影响。这个时候360随身WiFi 4G版的MAC地址过滤就能轻松的解决问题,通过设置后,可让不别人不能随便使用你的随身WiFi,默默的设置还不得罪人,非常好的解决办法。
  这里更加简单粗暴,不想让它上网,即便别人连接到了你的随身WiFi,你也可以让它立即断开,不给它使用。
  在使用中如果发生了其他的一些小问题,不要慌张,进入360随身WiFi 4G版的管理界面,点击帮助就会有一些解决办法,基本上能解决大部分的问题。如果实在有问题解决不了,那么也可以通过与360客服的联系进行解决。
  移动端管理:
  360随身WiFi 4G版管理界面针对手机和Pad等移动端进行了深度优化,各种开关与按钮都适合手机的尺寸操作。
更便捷的WiFi管理、流量监控界面
联网开关与设备列表
  对于360随身WiFi 4G版的网速相信是许多人非常关注的,通过实际使用的测试,下载速率达到了38.06Mbps,网络速度已经非常快了。而如果身处信号源较强的地点,网络速度则会更快。
  总结:
  体验下来,360随身WiFi 4G版给我的感受最明显的地方有:
  1.2200毫安时电池续航长久,能不间断的连续使用5小时以上  2.支持包括移动4G网络在内的多种网络制式,即便是普通的移动手机卡插入,无需额外操作方式即可傻瓜式的便捷上网。  3.PC端与移动端的管理界面更人性化,简单几步即可快速上手操作,简单易懂。  4.不需要插入电脑的USB,独立工作,无需下载和安装任何驱动软件  5.防蹭网、防吸费等安全管理做的非常到位,这也是360的老本行  6.小巧、便携、操作傻瓜,非常适合商旅、新闻发布会等场景的使用需求
  如果你是一个对网络非常有依赖的同学,不管你是经常出差的商务人士,还是在地铁中看视频的普通人群,360随身WiFi 4G版真正做到了适应各种使用人群的需求。而对于有些同学购买到了联通、电信版的手机,又要体验到极速的网络,那么搭配使用360随身WiFi 4G版绝对是一个不错的选择。■
行车视线精品文章推荐为什么手机连上WiFi网速很慢
时间: 10:04:03来源:作者:Keung(7)
随着越来越多的家庭使用无线路由器,用手机连家里的WiFi上网也是很普遍的一件事了。可是有时候,电脑网速是正常的,可手机连上的WiFi却很慢,这到底是什么原因呢?一、方法一WMM(无线多媒体),是802.11e&标准的一个子集。WMM允许无线通信根据数据类型定义一个优先级范围。为了使WMM功能工作,无线客户端必须也支持WMM。在开启无线路由器的WMM功能情况下,手机可以正常连接无线路由器,但是使用UC浏览器、自带浏览器、QQ和新浪都无法正常连接,软件提示“网络连接超时”。而在“无线路由设置”里面关闭WMM功能后,网络恢复正常,手机则能够正常上网。二、方法二该方法重点适用于取消“开启WMM”仍不能改善手机连接WIFI网速慢的问题1.在浏览器地址栏输入192.168.1.1到路由器设置操作主界面。2.点击-无线设置-基本设置-改动模式为:11g&only.&然后保存。如图3.之后点击-无线高级设置-取消开启WMM,之后保存。如图4.最后重启路由器,可以手动,也可以让路由器自动重启。自动重启方法如下图:注意:两个步骤操作完之后方可重启。不需要每次重启。Android 判断用户2G/3G/4G移动数据网络
在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据。
通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,如果是 mobile ,可以通过 NetworksInfo 对象的 getSubType() 和 getSubTypeName() 可以获取到对于的网络类型和名字。
网络类型和名字定义在 TelephonyManager 类里。
1 /** Network type is unknown */
2 public static final int NETWORK_TYPE_UNKNOWN = 0;
3 /** Current network is GPRS */
4 public static final int NETWORK_TYPE_GPRS = 1;
5 /** Current network is EDGE */
6 public static final int NETWORK_TYPE_EDGE = 2;
7 /** Current network is UMTS */
8 public static final int NETWORK_TYPE_UMTS = 3;
9 /** Current network is CDMA: Either IS95A or IS95B*/
10 public static final int NETWORK_TYPE_CDMA = 4;
11 /** Current network is EVDO revision 0*/
12 public static final int NETWORK_TYPE_EVDO_0 = 5;
13 /** Current network is EVDO revision A*/
14 public static final int NETWORK_TYPE_EVDO_A = 6;
15 /** Current network is 1xRTT*/
16 public static final int NETWORK_TYPE_1xRTT = 7;
17 /** Current network is HSDPA */
18 public static final int NETWORK_TYPE_HSDPA = 8;
19 /** Current network is HSUPA */
20 public static final int NETWORK_TYPE_HSUPA = 9;
21 /** Current network is HSPA */
22 public static final int NETWORK_TYPE_HSPA = 10;
23 /** Current network is iDen */
24 public static final int NETWORK_TYPE_IDEN = 11;
25 /** Current network is EVDO revision B*/
26 public static final int NETWORK_TYPE_EVDO_B = 12;
27 /** Current network is LTE */
28 public static final int NETWORK_TYPE_LTE = 13;
29 /** Current network is eHRPD */
30 public static final int NETWORK_TYPE_EHRPD = 14;
31 /** Current network is HSPA+ */
32 public static final int NETWORK_TYPE_HSPAP = 15;
看到这个代码和注释,相信没有这方面知识的人很难看懂,都啥玩意?这注释跟没注释有啥区别?!就是让人看着更加闹心而已。所以说,注释对阅读代码的人很重 要。当然这些东西可能太专业了,写这些代码的人估计是想写也不知道该怎么了,得写多大一坨啊?!我在最后会贴上一些我整理的资料,可以供大家参考一下,不 是很详细,也不专业,就是大概有个印象。
TelephonyManager 还提供了 getNetworkTypeName(int type) 的方法,这个方法可以返回一个字符串,但是信息量不大。
那怎么判断是 2G , 3G 还是 4G 网络呢?TelephonyManager 还提供了另外一个方法,getNetworkClass(int networkType) ,但这个方法被隐藏掉了,我把代码贴一下。
public static int getNetworkClass(int networkType) {&switch (networkType) {&case NETWORK_TYPE_GPRS:&case NETWORK_TYPE_EDGE:&case NETWORK_TYPE_CDMA:&case NETWORK_TYPE_1xRTT:&case NETWORK_TYPE_IDEN:&return NETWORK_CLASS_2_G;&case NETWORK_TYPE_UMTS:&case NETWORK_TYPE_EVDO_0:&case NETWORK_TYPE_EVDO_A:&case NETWORK_TYPE_HSDPA:&case NETWORK_TYPE_HSUPA:&case NETWORK_TYPE_HSPA:&case NETWORK_TYPE_EVDO_B:&case NETWORK_TYPE_EHRPD:&case NETWORK_TYPE_HSPAP:&return NETWORK_CLASS_3_G;&case NETWORK_TYPE_LTE:&return NETWORK_CLASS_4_G;&default:&return NETWORK_CLASS_UNKNOWN;&}&}&
然后下面是这几个常量的值。
/** Unknown network class.&{@hide} */&public static final int NETWORK_CLASS_UNKNOWN = 0;&/** Class of broadly defined "2G" networks.&{@hide} */&public static final int NETWORK_CLASS_2_G = 1;&/** Class of broadly defined "3G" networks.&{@hide} */&public static final int NETWORK_CLASS_3_G = 2;&/** Class of broadly defined "4G" networks.&{@hide} */&public static final int NETWORK_CLASS_4_G = 3;&
不知道为啥要把这些东西给隐藏起来,然道是不靠谱?!还是其他的更好的方式?!不知道,先这样吧,现在通过上面的手段,是可以知道用户用的是什么网络,当 然也可以区分出来用户使用的是 2G , 3G 还是 4G 了。当然,你获取到这些数据后,你也可以推算出用户用的是哪家公司的网络,移动的,联通的,还是电信的,当然,只在中国。而且虚拟运营商开始真正上市后, 这个就区分不出来是京东的,还是国美,苏宁的了,但是你可以知道你的手机号用的是联通的网还是移动的网。
最后贴上我收集整理的一些资料,可以参考一下。
GPRS & & & 2G(2.5) General Packet Radia Service 114kbpsEDGE & & & 2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbpsUMTS & & &3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准CDMA & & 2G 电信 Code Division Multiple Access 码分多址EVDO_0 & 3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3GEVDO_A &3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G1xRTT & & &2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,HSDPA & &3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps&HSUPA & &3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbpsHSPA & & &3G (分HSDPA,HSUPA) High Speed Packet Access&IDEN & & &2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)EVDO_B 3G EV-DO Rev.B 14.7Mbps 下行 3.5GLTE & & & &4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4G&EHRPD &3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级HSPAP &3G HSPAP 比 HSDPA 快些
1 import java.io.BufferedR
2 import java.io.InputStreamR
3 import java.text.DecimalF
4 import java.util.L
6 import android.content.C
7 import android.net.ConnectivityM
8 import android.net.NetworkI
9 import android.net.wifi.WifiI
10 import android.net.wifi.WifiM
11 import android.telephony.NeighboringCellI
12 import android.telephony.TelephonyM
13 import android.telephony.cdma.CdmaCellL
14 import android.telephony.gsm.GsmCellL
15 import android.util.L
17 public class NetWorkUtil {
public static boolean isWifiAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) ConfigManager
.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected() && networkInfo
.getType() == ConnectivityManager.TYPE_WIFI);
* 获取MAC地址
* @param context
public static String getMacAddress(Context context) {
if (context == null) {
return "";
String localMac = null;
if (isWifiAvailable()) {
localMac = getWifiMacAddress(context);
if (localMac != null && localMac.length() & 0) {
localMac = localMac.replace(":", "-").toLowerCase();
return localM
localMac = getMacFromCallCmd();
if (localMac != null) {
localMac = localMac.replace(":", "-").toLowerCase();
return localM
private static String getWifiMacAddress(Context context) {
String localMac = null;
WifiManager wifi = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
if (wifi.isWifiEnabled()) {
localMac = info.getMacAddress();
if (localMac != null) {
localMac = localMac.replace(":", "-").toLowerCase();
return localM
} catch (Exception e) {
e.printStackTrace();
return null;
* 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
* @attention 需要设备装有busybox工具
* @return Mac Address
private static String getMacFromCallCmd() {
String result = "";
result = callCmd("busybox ifconfig", "HWaddr");
if (result == null || result.length() &= 0) {
return null;
DebugLog.v("tag", "cmd result : " + result);
// 对该行数据进行解析
// 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
if (result.length() & 0 && result.contains("HWaddr") == true) {
String Mac = result.substring(result.indexOf("HWaddr") + 6,
result.length() - 1);
if (Mac.length() & 1) {
result = Mac.replaceAll(" ", "");
public static String callCmd(String cmd, String filter) {
String result = "";
String line = "";
Process proc = Runtime.getRuntime().exec(cmd);
InputStreamReader is = new InputStreamReader(proc.getInputStream());
BufferedReader br = new BufferedReader(is);
// 执行命令cmd,只取结果中含有filter的这一行
while ((line = br.readLine()) != null
&& line.contains(filter) == false) {
} catch (Exception e) {
e.printStackTrace();
* 网络是否可用
* @param context
public static boolean IsNetWorkEnable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
ToastUtil.showMessage(context, "无法连接网络");
return false;
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
// 判断当前网络是否已经连接
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
} catch (Exception e) {
e.printStackTrace();
ToastUtil.showMessage(context, "无法连接网络");
return false;
private static final int NETWORK_TYPE_UNAVAILABLE = -1;
// private static final int NETWORK_TYPE_MOBILE = -100;
private static final int NETWORK_TYPE_WIFI = -101;
private static final int NETWORK_CLASS_WIFI = -101;
private static final int NETWORK_CLASS_UNAVAILABLE = -1;
/** Unknown network class. */
private static final int NETWORK_CLASS_UNKNOWN = 0;
/** Class of broadly defined "2G" networks. */
private static final int NETWORK_CLASS_2_G = 1;
/** Class of broadly defined "3G" networks. */
private static final int NETWORK_CLASS_3_G = 2;
/** Class of broadly defined "4G" networks. */
private static final int NETWORK_CLASS_4_G = 3;
private static DecimalFormat df = new DecimalFormat("#.##");
// 适配低版本手机
/** 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;
* 格式化大小
* @param size
public static String formatSize(long size) {
String unit = "B";
float len =
if (len & 900) {
len /= 1024f;
unit = "KB";
if (len & 900) {
len /= 1024f;
unit = "MB";
if (len & 900) {
len /= 1024f;
unit = "GB";
if (len & 900) {
len /= 1024f;
unit = "TB";
return df.format(len) +
public static String formatSizeBySecond(long size) {
String unit = "B";
float len =
if (len & 900) {
len /= 1024f;
unit = "KB";
if (len & 900) {
len /= 1024f;
unit = "MB";
if (len & 900) {
len /= 1024f;
unit = "GB";
if (len & 900) {
len /= 1024f;
unit = "TB";
return df.format(len) + unit + "/s";
public static String format(long size) {
String unit = "B";
float len =
if (len & 1000) {
len /= 1024f;
unit = "KB";
if (len & 1000) {
len /= 1024f;
unit = "MB";
if (len & 1000) {
len /= 1024f;
unit = "GB";
return df.format(len) + "\n" + unit + "/s";
* 获取运营商
public static String getProvider() {
String provider = "未知";
TelephonyManager telephonyManager = (TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = telephonyManager.getSubscriberId();
Log.v("tag", "getProvider.IMSI:" + IMSI);
if (IMSI == null) {
if (TelephonyManager.SIM_STATE_READY == telephonyManager
.getSimState()) {
String operator = telephonyManager.getSimOperator();
Log.v("tag", "getProvider.operator:" + operator);
if (operator != null) {
if (operator.equals("46000")
|| operator.equals("46002")
|| operator.equals("46007")) {
provider = "中国移动";
} else if (operator.equals("46001")) {
provider = "中国联通";
} else if (operator.equals("46003")) {
provider = "中国电信";
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")
|| IMSI.startsWith("46007")) {
provider = "中国移动";
} else if (IMSI.startsWith("46001")) {
provider = "中国联通";
} else if (IMSI.startsWith("46003")) {
provider = "中国电信";
} catch (Exception e) {
e.printStackTrace();
* 获取网络类型
public static String getCurrentNetworkType() {
int networkClass = getNetworkClass();
String type = "未知";
switch (networkClass) {
case NETWORK_CLASS_UNAVAILABLE:
type = "无";
case NETWORK_CLASS_WIFI:
type = "Wi-Fi";
case NETWORK_CLASS_2_G:
type = "2G";
case NETWORK_CLASS_3_G:
type = "3G";
case NETWORK_CLASS_4_G:
type = "4G";
case NETWORK_CLASS_UNKNOWN:
type = "未知";
private static int getNetworkClassByType(int networkType) {
switch (networkType) {
case NETWORK_TYPE_UNAVAILABLE:
return NETWORK_CLASS_UNAVAILABLE;
case NETWORK_TYPE_WIFI:
return NETWORK_CLASS_WIFI;
case NETWORK_TYPE_GPRS:
case NETWORK_TYPE_EDGE:
case NETWORK_TYPE_CDMA:
case NETWORK_TYPE_1xRTT:
case NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case NETWORK_TYPE_UMTS:
case NETWORK_TYPE_EVDO_0:
case NETWORK_TYPE_EVDO_A:
case NETWORK_TYPE_HSDPA:
case NETWORK_TYPE_HSUPA:
case NETWORK_TYPE_HSPA:
case NETWORK_TYPE_EVDO_B:
case NETWORK_TYPE_EHRPD:
case NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
return NETWORK_CLASS_UNKNOWN;
private static int getNetworkClass() {
int networkType = NETWORK_TYPE_UNKNOWN;
final NetworkInfo network = ((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
networkType = NETWORK_TYPE_WIFI;
} else if (type == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager telephonyManager = (TelephonyManager) ConfigManager
.getContext().getSystemService(
Context.TELEPHONY_SERVICE);
networkType = telephonyManager.getNetworkType();
networkType = NETWORK_TYPE_UNAVAILABLE;
} catch (Exception ex) {
ex.printStackTrace();
return getNetworkClassByType(networkType);
public static String getWifiRssi() {
int asu = 85;
final NetworkInfo network = ((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager = (WifiManager) ConfigManager
.getContext()
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
asu = wifiInfo.getRssi();
} catch (Exception e) {
e.printStackTrace();
return asu + "dBm";
public static String getWifiSsid() {
String ssid = "";
final NetworkInfo network = ((ConnectivityManager) ConfigManager
.getContext()
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
WifiManager wifiManager = (WifiManager) ConfigManager
.getContext()
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
ssid = wifiInfo.getSSID();
if (ssid == null) {
ssid = "";
ssid = ssid.replaceAll("\"", "");
} catch (Exception e) {
e.printStackTrace();
* 检查sim卡状态
* @param ctx
public static boolean checkSimState() {
TelephonyManager tm = (TelephonyManager) ConfigManager.getContext()
.getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
|| tm.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
return false;
return true;
* 获取imei
public static String getImei() {
TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
String imei = mTelephonyMgr.getDeviceId();
if (imei == null) {
imei = "000";
public static String getPhoneImsi() {
TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
return mTelephonyMgr.getSubscriberId();
public static CellInfo getNetInfo() {
CellInfo info = new CellInfo();
TelephonyManager mTelephonyManager = (TelephonyManager) ConfigManager
.getContext().getSystemService(Context.TELEPHONY_SERVICE);
String operator = mTelephonyManager.getNetworkOperator();
if (operator != null) {
/** 通过operator获取 MCC 和MNC */
if (operator.length() & 3) {
String mcc = operator.substring(0, 3);
String mnc = operator.substring(3);
info.setMcc(mcc);
info.setMnc(mnc);
int lac = 0;
int cellId = 0;
int phoneType = mTelephonyManager.getPhoneType();
if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
GsmCellLocation location = (GsmCellLocation) mTelephonyManager
.getCellLocation();
/** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID */
lac = location.getLac();
cellId = location.getCid();
} else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
CdmaCellLocation location = (CdmaCellLocation) mTelephonyManager
.getCellLocation();
lac = location.getNetworkId();
cellId = location.getBaseStationId();
cellId /= 16;
if (lac == 0 || cellId == 0) {
List&NeighboringCellInfo& infos = mTelephonyManager
.getNeighboringCellInfo();
int lc = 0;
int ci = 0;
int rssi = 0;
for (NeighboringCellInfo cell : infos) {
// 根据邻区总数进行循环
if (lc == 0 || ci == 0) {
lc = cell.getLac();
ci = cell.getCid();
rssi = cell.getRssi();
// sb.append(" LAC : " + info.getLac());
// // 取出当前邻区的LAC
// sb.append(" CID : " + info.getCid());
// // 取出当前邻区的CID
// sb.append(" BSSS : " + (-113 + 2 * info.getRssi()) +
// "\n"); // 获取邻区基站信号强度
rssi = -113 + 2 *
} catch (Exception e) {
e.printStackTrace();
阅读(...) 评论()}

我要回帖

更多关于 安个路由器信号就会好吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信