首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -如何以编程方式打开wifi,直到它未启用为止

Android -如何以编程方式打开wifi,直到它未启用为止
EN

Stack Overflow用户
提问于 2014-09-04 21:09:45
回答 1查看 3.2K关注 0票数 0

我想用wifi通过本地网络发送数据。在发送数据之前,我检查wifi状态,如果未启用,请询问用户并打开wifi。问题是,如果我打开wifi并尝试立即使用它,我就会有一个错误,因为wifi需要一些时间才能打开。

因此,正如我所想的,我需要打开wifi并设置当wifi进入启用状态时将调用的处理程序。但是WifiManager并没有为处理程序提供这种方法。我怎么能捕捉到无线网络状态的变化?

UPD

我如何打开无线网络:

代码语言:javascript
复制
WifiManager wifi = WifiUtils.getWifi( getApplicationContext() );
if (WifiUtils.isWifiEnabled( wifi)) return true;
wifi.setWifiEnabled(true);
//---
public static WifiManager getWifi( Context ctx) 
{
    return (WifiManager)ctx.getSystemService(ctx.WIFI_SERVICE);
}

public static boolean isWifiEnabled( WifiManager wifi)
{
    if (wifi==null) return false;
    if (wifi.getWifiState()!=wifi.WIFI_STATE_ENABLED) return false;
    return true;
}
EN

回答 1

Stack Overflow用户

发布于 2014-09-04 21:18:12

首先,如果您想检查wifi是否已连接,可以使用以下方法

代码语言:javascript
复制
ConnectivityManager cm = (ConnectivityManager) getSystemService(
        Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetwork != null && wifiNetwork.isConnected()) {

}
else{
//ask your user to turn on wifi
}

现在,如果您想检查设备是否可以访问internet,即使wifi是开着的,那么您可以做如下的事情

代码语言:javascript
复制
if (wifiNetwork != null && wifiNetwork.isConnected()) {

HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(10000);
            int responseCode = conn.getResponseCode();
            if(responseCode == 200){

                //internet access
            }
            else {
                //no internet access
            }
}

如果您希望处理wifi状态更改,则可以尝试无线或3g网络状态变化时的BroadcastReceiverAndroid:收到连接性更改的通知

但是,如果要以编程方式打开wifi,请参阅这个问题.Basically,则需要执行以下操作

代码语言:javascript
复制
WifiManager wManager = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

wManager.setWifiEnabled(booleanValue); //true for on and false for off

当然,您还需要在AndroidManifest.xml中添加必要的权限,例如

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>    
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25675031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档