Nat*_*ann 234 android wifimanager android-wifi
除非他们连接了Wi-Fi,否则我不希望我的用户甚至尝试下载某些内容.但是,我似乎只能判断是否启用了Wi-Fi,但他们仍然可以拥有3G连接.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
然而,国家不是我所期望的.即使连接了Wi-Fi,我也会OBTAINING_IPADDR
成为状态.
Jas*_*ght 461
您应该能够使用ConnectivityManager来获取Wi-Fi适配器的状态.从那里你可以检查它是否已连接或甚至可用.
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
// Do whatever
}
Run Code Online (Sandbox Code Playgroud)
注意:应该注意(对于我们这里的n00bies)你需要添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
到你的
AndroidManifest.xml为此工作.
注2:public NetworkInfo getNetworkInfo (int networkType)
现已弃用:
此方法在API级别23中已弃用.此方法不支持同一类型的多个连接网络.请改用getAllNetworks()和getNetworkInfo(android.net.Network).
注3:public static final int TYPE_WIFI
现已弃用:
此常量在API级别28中已弃用.应用程序应使用NetworkCapabilities.hasTransport(int)或requestNetwork(NetworkRequest,NetworkCallback)来请求适当的网络.支持运输.
rev*_*ary 68
由于现在在API-23中不推荐使用NetworkInfo.isConnected()方法,因此这里有一种方法可以检测Wi-Fi适配器是否已打开并使用WifiManager连接到接入点:
private boolean checkWifiOnAndConnected() {
WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if( wifiInfo.getNetworkId() == -1 ){
return false; // Not connected to an access point
}
return true; // Connected to an access point
}
else {
return false; // Wi-Fi adapter is OFF
}
}
Run Code Online (Sandbox Code Playgroud)
Don*_*rty 35
我只是使用以下内容:
SupplicantState supState;
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();
Run Code Online (Sandbox Code Playgroud)
在调用getSupplicantState()时,将返回其中一个状态;
相关 - 协会已完成.
关联 - 尝试与接入点关联.
已完成 - 所有身份验证均已完成.
DISCONNECTED - 此状态表示客户端未关联,但可能开始寻找接入点.
DORMANT - 客户端发出显式DISCONNECT命令时报告的Android添加状态.
FOUR_WAY_HANDSHAKE - WPA四向键握手正在进行中.
GROUP_HANDSHAKE - WPA组密钥握手正在进行中.
不活跃 - 非活动状态.
INVALID - 通常永远不会被看到的伪状态.
扫描 - 扫描网络.
无限制 - 没有联系.
kuc*_*chi 18
我在我的应用程序中使用此功能来检查活动网络是否为Wi-Fi:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{
// Do your work here
}
Run Code Online (Sandbox Code Playgroud)
小智 17
我看了几个像这样的问题并提出了这个问题:
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isConnected()){
// If Wi-Fi connected
}
if (mobile.isConnected()) {
// If Internet connected
}
Run Code Online (Sandbox Code Playgroud)
我使用if for我的许可证检查Root Toolbox PRO,它似乎工作得很好.
虽然Jason的答案是正确的,但现在getNetWorkInfo(int)是一种弃用的方法.所以,下一个函数将是一个不错的选择:
public static boolean isWifiAvailable (Context context)
{
boolean br = false;
ConnectivityManager cm = null;
NetworkInfo ni = null;
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
ni = cm.getActiveNetworkInfo();
br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));
return br;
}
Run Code Online (Sandbox Code Playgroud)
在NetworkInfo
此类已废弃的API级别29,与相关接入方式等一起ConnectivityManager#getNetworkInfo()
和ConnectivityManager#getActiveNetworkInfo()
。
该文档现在建议人们使用ConnectivityManager.NetworkCallback
API的异步回调监控,或使用ConnectivityManager#getNetworkCapabilities
或ConnectivityManager#getLinkProperties
对网络信息的同步访问
调用者应改为使用 ConnectivityManager.NetworkCallback API 来了解连接更改,或切换到使用 ConnectivityManager#getNetworkCapabilities 或 ConnectivityManager#getLinkProperties 来同步获取信息。
要检查 WiFi 是否已连接,这是我使用的代码:
科特林:
val connMgr = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
connMgr?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val network: Network = connMgr.activeNetwork ?: return false
val capabilities = connMgr.getNetworkCapabilities(network)
return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
val networkInfo = connMgr.activeNetworkInfo ?: return false
return networkInfo.isConnected && networkInfo.type == ConnectivityManager.TYPE_WIFI
}
Run Code Online (Sandbox Code Playgroud)
爪哇:
ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr == null) {
return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Network network = connMgr.getActiveNetwork();
if (network == null) return false;
NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
} else {
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}
Run Code Online (Sandbox Code Playgroud)
请记住还要ACCESS_NETWORK_STATE
为您的清单文件添加权限。
归档时间: |
|
查看次数: |
212056 次 |
最近记录: |