• android 10 wifi操作


    android 10及以上wifi发生了变化,android 10及以下代码需要适配。

    android 10及以上:

    1.权限:

    
    
    
    
    
    
    
    
    
    

    2.动态申请位置权限:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
        if(ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions((Activity) context, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            ActivityCompat.requestPermissions((Activity) context, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        }
    }

    3.android 10以下打开wifi,android 10及以上无法再使用代码打开,需要手动到设置中打开。

    /**
     * 打开WIFI(该方法会阻塞线程)
     *
     * @param context
     */
    public static void openWifi(Context context) {
        if (Build.VERSION.SDK_INT < 29) {
            WifiManager wifiManager = getWifiManager(context);
    
            if (!wifiManager.isWifiEnabled()) {
                Log.i(TAG, "wifi is not Enabled");
                boolean isEnabled = wifiManager.setWifiEnabled(true);
                Log.i(TAG, "isEnabled:" + isEnabled);
                // 开启wifi功能需要一段时间,所以要等到wifi
                // 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
                while (wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED) {
                    try {
                        // 为了避免程序一直while循环,让它睡个100毫秒检测……
                        Thread.sleep(100);
                    } catch (InterruptedException ie) {
                    }
                }
            } else {
                Log.i(TAG, "wifi is Enabled");
            }
        } else {
            //Android 10 不支持代码打开WiFi开关,需要用户跳转系统界面自行打开开关
        }
    }

    4.连接wifi:

    public boolean connect(Context context,WifiConfiguration wcg)
    {
        final boolean[] isConnected = {false};
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
        {
            try {
                NetworkSpecifier specifier =
                        new WifiNetworkSpecifier.Builder()
                                .setSsidPattern(new PatternMatcher(WifiSSID, PatternMatcher.PATTERN_PREFIX))
                                .setWpa2Passphrase(WifiPASSWORD)
                                .build();
    
                NetworkRequest request =
                        new NetworkRequest.Builder()
                                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                                .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                                .setNetworkSpecifier(specifier)
                                .build();
    
                ConnectivityManager connectivityManager = (ConnectivityManager)
                        mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    
                ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        Log.i(TAG,"WiFi连接成功");
                        System.out.println("wifiInfo=================");
                        isConnected[0] = true;
                    }
                    @Override
                    public void onUnavailable() {
                        Log.i(TAG,"WiFi连接失败,请手动连接");
                    }
                };
                //  connectivityManager.registerNetworkCallback(request,networkCallback);
                connectivityManager.requestNetwork(request,networkCallback);
            } catch (SecurityException e){
                e.printStackTrace();
            } catch (IllegalArgumentException e){
                e.printStackTrace();
            } catch (RuntimeException e){
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return isConnected[0];
        }else{
            WifiManager wifiManager = getWifiManager(context);
            int wcgID = wifiManager.addNetwork(wcg);
            boolean b = wifiManager.enableNetwork(wcgID, true);
    
            try {
                Thread.sleep(500);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
    
            int count = 0;
            while (true) {
                count++;
    
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
                ConnectivityManager conMan = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo.State wifi = conMan.getNetworkInfo(
                        ConnectivityManager.TYPE_WIFI).getState();
                if (NetworkInfo.State.CONNECTED == wifi) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    break;
                }
    
                if (count > 6000) {
                    b = false;
                    break;
                }
            }
    
            System.out.println("connect SSID:" + wcg.SSID);
            System.out.println("connect wcgID:" + wcgID);
            System.out.println("connect enableNetwork:" + b);
            return b;
        }
    }
  • 相关阅读:
    Systemverilog断言介绍(四)
    flutter学习之控件的使用
    everything-everything使用技巧,过滤文件语法
    java基于微信小程序的校园二手交易平台+ssm+uinapp+Mysql+计算机毕业设计
    rust 字符串字面量 - 字符串前缀
    【BMS软开系列】1、 ISO 26262功能安全标准 (一)
    如何用devtools快速开发一个R语言包?
    洛谷P4345 超能粒子炮·改
    appinventor多个拓展导入导致编译出错:
    docker笔记(一):安装、常用命令
  • 原文地址:https://blog.csdn.net/llj0201/article/details/132742512