网络checkbox状态改变事件从3G变成4G是不是意味着地理位置改变了

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网络了。由于手里的手机卡有限,所以有些不全,欢迎大家补充,共享。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'后使用快捷导航没有帐号?
查看: 4239|回复: 5
在线时间 小时
立即注册,加入爱黑武论坛的大家庭!爱黑武,爱上搞机生活!
才可以下载或查看,没有帐号?
是这样的,我今天去营业厅换4G卡,别人问我是只换卡,还是要开4G网?如果开4G网需要办4G套餐
我的问题是:我们的手机用不了4G,但是因为破解问题需要用4G卡,那么现在去营业厅是不是只要换成4G卡就行了?要不要开4G网?4G网的套餐流量 3G网能不能用?{:soso_e100:}
爱黑武,爱上搞机生活!
在线时间 小时
一,用4G网络无需换卡,只要你的套餐是4G套餐,同时手机支持4G网络即可,与你手机的SIM卡无关。二,为什么因为破解问题要用4G卡?三、没有单独4G卡这种东西,你要开4G肯定要开4G网络的。联通的话现在是3G/4G一体化套餐,你4G没网络就会自降成3G
爱黑武,爱上搞机生活!
在线时间 小时
去营业厅应该是直接可以换4G卡的,不需要开通4G套餐。
爱黑武,爱上搞机生活!
在线时间 小时
一,用4G网络无需换卡,只要你的套餐是4G套餐,同时手机支持4G网络即可,与你手机的SIM卡无关。二,为什么 ...
中国电信 移动网络1X/3G附着问题的成因(8月7日更新)
(出处: 爱黑武论坛)
这篇帖子告诉你。
爱黑武,爱上搞机生活!
在线时间 小时
MOTO X只有XT1058和XT1052才可以用中国大陆4G。
爱黑武,爱上搞机生活!
在线时间 小时
去营业厅应该是直接可以换4G卡的,不需要开通4G套餐。
那要不要开4G网啊?
爱黑武,爱上搞机生活!
站长推荐 /1
最新手机新闻资讯尽在爱黑武!爱黑武,为了我们共同的热爱而热爱。
Powered by Discuz &
湘ICP备号 | 京公网安备号你的位置: >
> Android Network ——判断网络状态(网络的连接,改变,和判断2G/3G/4G)
现在app大多都需要从网络上获得数据。所以访问网络是在所难免。但是再访问网络之前,我们应该先做一下网络的状态判断。其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Http访问网络即可。很多人在开发就经常把网络这块直接跳过,直接访问网络,可以一断网,各种体验效果不好,不是说app没法用,只是体验效果差。还有,就是我们可能为用户考虑,因为现在一般连网是wifi和手机流量,都知道后者收费是比较高的。假如我们的app加载的图片或者有大的数据下载操作,可是用户的本意是要是在流量下的话就不要操作这些很费流量的的操作,这样就必须要我们做一些连网状态的判断。网络是否连接良好,连接的wifi还是流量,断网或者网络改变了的时候怎么做,这都是一些细节,但是要注意处理。
我们在做访问的时候都得进行判断是否连网。判断连网也比较简单,就用到了两个类。和。
只要执行下面的代码就可以了。
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()得到的类型来判断当前是什么网络。
其实,Android的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网络了。由于手里的手机卡有限,所以有些不全,欢迎大家补充,共享。
转载请注明: &
与本文相关的文章为什么网络很好的情况下4g变成3g了?_百度知道
为什么网络很好的情况下4g变成3g了?
baidu&nbsp://a://a.hiphotos.jpg" esrc="/zhidao/pic/item/3b292df5e0fed732a85edf8cb171bf.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.baidu./zhidao/wh%3D600%2C800/sign=cb39dbc251c//zhidao/wh%3D450%2C600/sign=9aa51ba10f24ab18e043e93300cacafb/3b292df5e0fed732a85edf8cb171<a href="http://a
提问者采纳
因为那个地方
搜索不到4G 信号, 所以会自动变成3G
我昨天在这儿也是4g的,是因为网络不稳定吗?
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
来自团队:
其他类似问题
为您推荐:
其他3条回答
你的网络可能带不起4g的
什么意思?我手机和卡都是4g的
还是网络不行
要不就是你没开通4g
距离信号塔远,或者该地方网线没覆盖
4G信号没有覆盖到你所在的地方吧
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁获取网络状态,区分2G、3G、4G、WIFI等,非reachability
下载简书移动应用
写了12040字,被48人关注,获得了38个喜欢
获取网络状态,区分2G、3G、4G、WIFI等,非reachability
原文戳这里
+(NSString *)getNetWorkStates{
UIApplication *app = [UIApplication sharedApplication];
NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
NSString *state = [[NSString alloc]init];
int netType = 0;
//获取到网络返回码
for (id child in children) {
if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
//获取到状态栏
netType =[[child valueForKeyPath:@"dataNetworkType"]intValue];
switch (netType) {
state = @"无网络";
state = @"2G";
state = @"3G";
state = @"4G";
state = @"WIFI";
}//根据状态选择}
根据状态栏获取网络状态,可以区分2G、3G、4G、WIFI,系统的方法,比较快捷。稍微蛋疼的是万一连接的WIFI没有联网的话···你懂得
来拿钱羞辱我~,扔我脸上,让我继续这么不要脸下去。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
来拿钱羞辱我~,扔我脸上,让我继续这么不要脸下去。
选择支付方式:

我要回帖

更多关于 用肢体动作改变状态 的文章

 

随机推荐