使用网络说明符的 Android Q Wifi 连接

问题描述

根据 Android 10 标准指南,我使用 wifi 说明符与没有互联网的 AP 端点的物联网设备进行通信,当第一个物联网设备被配置但当我完成时,使用以下代码一切正常使用从 IOT(Wifi AP-SSID)注销的通信和断开连接,然后如果我尝试第二个 IOT 设备,我也有相同的(AP-SSID)然后它显示在对话框中连接,但是当我点击 AP-SSID 然后我不在 Network Callback(onAvailable) 中没有得到回调,因为我无法继续第二个面板。我观察到,如果我重新启动手机,然后尝试再次配置任何第一个面板,它会再次无缝地用于第一个 IOT 设备。

请建议我该怎么做或做错了什么。

@RequiresApi(api = Build.VERSION_CODES.Q)
private void connectUsingNetworkSuggestion(String ssid,String password) {
    WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
            .setSsid(ssid)
            .setWpa2Passphrase(password)
            .build();

    NetworkRequest networkRequest = new NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .setNetworkSpecifier(wifiNetworkSpecifier)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build();

    ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            super.onAvailable(network);
            connectivityManager.bindProcesstoNetwork(network);
            Log.e(TAG,"onAvailable");
            intiateTCPConnection();
        }

        @Override
        public void onLosing(@NonNull Network network,int maxmsToLive) {
            super.onLosing(network,maxmsToLive);
            Log.e(TAG,"onLosing");
        }

        @Override
        public void onLost(Network network) {
            super.onLost(network);
            Log.e(TAG,"losing active connection");
        }

        @Override
        public void onUnavailable() {
            super.onUnavailable();
            Log.e(TAG,"onUnavailable");
        }
    };
    this.networkCallback = networkCallback;
    connectivityManager.requestNetwork(networkRequest,networkCallback);
} 

为了与 IOT wifi(AP 网络)断开连接,我使用了以下代码

 private void disconnectAPNetwork() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            ConnectivityManager manager = (ConnectivityManager) mContext.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
            manager.unregisterNetworkCallback(networkCallback); // which is common
            manager.bindProcesstoNetwork(null);
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)