首页 > 解决方案 > 以编程方式连接到它时 Wifi Internet 无法正常工作 android>=10

问题描述

我正在尝试在 android 中以编程方式连接到 Wifi,但问题是 wifi 正在连接,但互联网无法正常工作,虽然 wifi 有互联网但在应用程序上它不工作。当我尝试添加 NET_CAP_INTERNET 时,它会捕获块而不是连接到 wifi。我有oneplus手机,在其他一些手机中我也面临这个问题。我也尝试添加 NET_CAP_NO_RESTRICTION 但问题仍然存在。帮我解决这个问题。

同样对于低于 10 的 android,因为我们没有任何回调,所以我们怎么知道用户输入了错误的密码。就像当用户输入错误的密码时我们需要做一些事情一样。我们应该怎么做?

private  void connectToWifi(String ssid, String password) {
      
        WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            try {
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = "\"" + ssid + "\"";
                wifiConfig.preSharedKey = "\"" + password + "\"";
                int netId = wifiManager.addNetwork(wifiConfig);
                wifiManager.enableNetwork(netId, true);
                if(checkWithCurrentConnectedWifi(ssid))
                    navController.navigate(R.id.configureWififragment);
                else
                {
                    enterSsidPassManually();
                    Toast.makeText(getActivity(), R.string.wrongCredentials, Toast.LENGTH_SHORT).show();
                }

            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getActivity(),
                        R.string.wifi_connection_error,
                        Toast.LENGTH_SHORT).show();
                count++;
            }
        } else {
            try {
                WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
                        .setSsid(ssid)
                        .setWpa2Passphrase(password)
                        .build();

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

                ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
                ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        super.onAvailable(network);

                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            connectivityManager.bindProcessToNetwork(network);
                        } else {
                            ConnectivityManager.setProcessDefaultNetwork(network);
                        }
                        if(checkWithCurrentConnectedWifi(ssid))
                            navController.navigate(R.id.configureWififragment);
                        else
                        {
                            Toast.makeText(getActivity(), R.string.notGatewayWifi, Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onLosing(@NonNull Network network, int maxMsToLive) {
                        //Toast.makeText(getActivity(), "on Losing", Toast.LENGTH_SHORT).show();
                        super.onLosing(network, maxMsToLive);
                    }

                    @Override
                    public void onLost(Network network) {


                        //Toast.makeText(getActivity(), "onLost", Toast.LENGTH_SHORT).show();
                        super.onLost(network);
                    }

                    @Override
                    public void onUnavailable() {
                      
                            
                         
                        super.onUnavailable();
                    }
                };
                connectivityManager.requestNetwork(networkRequest, networkCallback);
            } catch (Exception e) {
                Toast.makeText(getActivity(),R.string.wifi_connection_error,Toast.LENGTH_SHORT).show();
                count++;
            }
        }
    }

标签: androidandroid-wifiwifimanager

解决方案


推荐阅读