0
点赞
收藏
分享

微信扫一扫

Android网络连接判断与处理,flutter弹窗输入

穆熙沐 2022-03-19 阅读 45

connectionReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

ConnectivityManager connectMgr \= (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

NetworkInfo mobNetInfo \= connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

NetworkInfo wifiNetInfo \= connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {

Log.i(TAG, "unconnect");

// unconnect network

}else {

// connect network

}

}

};

2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

registerReceiver(connectionReceiver, intentFilter);

3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:

if (connectionReceiver != null) {

unregisterReceiver(connectionReceiver);

}

Ps:网上还有很多关于使用TelephonyManager?的方法的,方法如下(但是我试了好几次都有问题,如每次第一次进入一个Activity时会自动收到网络断开的信号,每次网络状态改变时收到多次回调且状态不正确。不知道有什么要注意的地方,求指点!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

mTelephonyMgr.listen(new PhoneStateListener(){

@Override

public void onDataConnectionStateChanged(int state) {

switch(state){

case TelephonyManager.DATA_DISCONNECTED://网络断开

break;

case TelephonyManager.DATA_CONNECTING://网络正在连接

break;

case TelephonyManager.DATA_CONNECTED://网络连接上

break;

}

}

}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

至于第二种方法,本人并没有去尝试过。第一种方式还是比较好用,如果要程序隐藏在后台的话,建议开个service,将BroadcastReceive

Android网络连接判断与处理,flutter弹窗输入

r注册在service,但不要忘了取消注册。

在测试中遇到过这样的状况,将一个当前连接wifi的路由设备关闭,但是程序并没有捕捉到unconnect network,可能是因为手机设备立刻连接另一个路由设备了。

[Android 监控网络状态]( )

上面这个方法就是判断网络是否连接的代码,返回true表示有网络,返回false表示无网络。 在Android网络应用程序开发中,经常要判断网络连接是否可用,因此经常有必要监听网络状态的变化。android的网络状态监听可以用BroadcastReceiver来接收网络状态改变的广 播,具体实现如下:

//注册网络监听

IntentFilter filter = new IntentFilter();

filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

registerReceiver(mNetworkStateReceiver, filter);

//在Activity中的onDestroy中:'

unregisterReceiver(mNetworkStateReceiver); //取消监听

很多朋友在android开发中,都会遇到手机网络类型判断,因为就目前的android平台手机来说:可能会存在4中状态

1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因)

2.使用WIFI上网

3.CMWAP(中国移动代理)

4.CMNET上网

这四种状态,如果没有网络,肯定是无法请求Internet了,如果是wap就需要为手机添加中国移动代理,关于为手机添加中国移动的代理,请到

http://www.2cto.com/kf/201111/112100.html 这里写有关于添加中国移动代理的例子!

下面是网络判断的方法:

1 /**

2

3 * @author sky 4

5 * Email vipa1888@163.com

6

7 * QQ:840950105

8

9 * 获取当前的网络状态 -1:没有网络 1:WIFI网络2:wap网络3:net网络

10

11 * @param context

12

13 * @return

14

15 */

16

17 public static int getAPNType(Context context){

18

19 int netType = -1;

20

21 ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

22

23 NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

24

25

26

27 if(networkInfo==null){

28

29 return netType;

30

31 }

32

33 int nType = networkInfo.getType();

34

35 if(nType==ConnectivityManager.TYPE_MOBILE){

36

37 Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());

38

39 if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){

40

41 netType = CMNET;

42

总结

【Android 详细知识点思维脑图(技能树)】

image

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

Android网络连接判断与处理,flutter弹窗输入

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

举报

相关推荐

0 条评论