【问题标题】:Android check Wi-Fi Direct is activatedAndroid 检查 Wi-Fi Direct 是否已激活
【发布时间】:2017-06-14 16:35:38
【问题描述】:

如何检查设备上的 Wi-Fi Direct 是否已激活?

我尝试通过以下方式检查 Wi-Fi:

WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
return wifiManager.isWifiEnabled();

但是有些设备不支持同时 Wi-Fi 和 Wi-Fi Direct(华为荣耀 4C,当你激活 Wi-Fi Direct 时它会关闭 Wi-Fi),所以这种方式行不通。

BroadcastReceiver 中收听WIFI_P2P_STATE_CHANGED_ACTION 就像there 一样也是不可接受的,因为它只会在我使用Wi-Fi Direct 开始一些操作(如发现)时触发,但我需要检查它的状态之前。

【问题讨论】:

标签: android wifi-direct wifip2p


【解决方案1】:

您可以像这样通过 WifiDirectBroadcastReceiver 做到这一点:

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {

private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;

public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel) {
    super();
    this.mManager = manager;
    this.mChannel = channel;
}

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Boolean isEnabled;

    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
        // check if Wi-Fi is enabled 
        int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
        if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
            isEnabled = true;
        } else {
            isEnabled = false;
        }
    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        // get list of peers by WifiP2pManager.requestPeers()
    } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
        // Respond to new connections 
    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
        // on device's wifi state changes
    }
}
}

【讨论】:

  • 这是来自答案的代码,我有问题链接。在我的情况下这是不可接受的。
【解决方案2】:

您应该能够使用 ConnectivityManager 来获取 Wi-Fi 的状态。

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected()) {
        // Do whatever
    }

请在清单 ACCESS_NETWORK_STATE && INTERNET 中检查您的权限。

【讨论】:

  • 这是关于 Wi-Fi,而不是 Wi-Fi Direct。并且此方法已被弃用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2023-01-29
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多