博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android判断网络是否打开,并打开设置网络界面
阅读量:5209 次
发布时间:2019-06-14

本文共 2854 字,大约阅读时间需要 9 分钟。

前两天遇到一个比较古老的项目(Android 2.2版本),各种错误,各种难用,公司负责对项目进行维护和优化,就组织QC(测试)部门对它进行了全面测试,发现了一堆问题,我就负责搞定这些问题,囧!看着凌乱的代码,各种问题,感觉看哪里都不正常了。其中有一个功能:程序登陆的时候检测手机是否联网,假如联网直接进入登陆界面,假如没有联网,则当用户点击提示的确定按钮时,打开手机网络连接设置界面“。但是这个程序,点击确定就会强制退出,通过研究发现原来问题在这里:


转载:

由于Android的SDK版本不同所以里面的API和设置方式也是有少量变化的,尤其是在Android 3.0 及后面的版本,UI和显示方式也发生了变化,其中网络设置的调用发生了彻底改变,所以假如还停留在之前的调用方式,那么程序就会出错,因此应该在调用之前加一个判断,假如:手机的API<10,则一种调用方式,API>10则是另一种调用方式,

调用方式:

//判断手机系统的版本  即API大于10 就是3.0或以上版本                 if(android.os.Build.VERSION.SDK_INT>10){                    intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);                }else{                    intent = new Intent();                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");                    intent.setComponent(component);                    intent.setAction("android.intent.action.VIEW");                }                context.startActivity(intent);

在 AndroidManifest.xml中设置权限

  因此,程序强退就是因为开发的时候还是2.2版本,到3.0之后就会出错!!


转载:

获取网络连接状态

随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能。

Android平台提供了  类,用于网络连接状态的检测。

Android开发文档这样描述 的作用:

 

Class that answers queries about the state of network connectivity. It also notifies applications when network connectivity changes. Get an instance of this class by calling.

The primary responsibilities of this class are to:

  1. Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)
  2. Send broadcast intents when network connectivity changes
  3. Attempt to "fail over" to another network when connectivity to a network is lost
  4. Provide an API that allows applications to query the coarse-grained or fine-grained state of the available networks
下面这个简单的例子 checkNetworkInfo() 说明了如何编程获取Android手机的当前网络状态和调用网络设置:
privatevoid checkNetworkInfo()    {        ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);        //mobile 3G Data Network        State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();        txt3G.setText(mobile.toString());        //wifi        State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();        txtWifi.setText(wifi.toString());                //如果3G网络和wifi网络都未连接,且不是处于正在连接状态 则进入Network Setting界面 由用户配置网络连接        if(mobile==State.CONNECTED||mobile==State.CONNECTING)            return;        if(wifi==State.CONNECTED||wifi==State.CONNECTING)            return;                        startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));//进入无线网络配置界面        //startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //进入手机中的wifi网络设置界面            }

注:

根据Android的安全机制,在使用ConnectivityManager时,必须在AndroidManifest.xml中添加<uses- permission android:name="android.permission.ACCESS_NETWORK_STATE" />

否则无法获得系统的许可。

wi-fi 状态为已连接(CONNECTED).

 

转载于:https://www.cnblogs.com/smilefortoday/p/4043265.html

你可能感兴趣的文章
分享适合个人站长的5类型网站
查看>>
类别的三个作用
查看>>
【SICP练习】85 练习2.57
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
Maximum Product Subarray
查看>>
shell 默认变量
查看>>
solr相关配置翻译
查看>>
通过beego快速创建一个Restful风格API项目及API文档自动化(转)
查看>>
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
如何选择适合自己的云管理平台(一)
查看>>
Hibernate中inverse="true"的理解
查看>>
不同版本(2.3,2.4,2.5,3.0)的Servlet web.xml 头信息
查看>>
Java的String中的subString()方法
查看>>
selenium +chrome headless Adhoc模式渲染网页
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>