【uni-app】基于uni-app的Android离线打包,wifi物联网

背景:公司有款产品内置wifi模块,需要Android端提供接口供前端uni-app去调用。主要功能分为开启wifi、关闭wifi、连接wifi。

重点:以下会涉及Android10以下以及Android10(包括harmony系统)以上的连接方法。

记得在配置文件中声明权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

1.首先判断有没有开启wifi,未开启则提示开启(同)

//判断wifi开启和关闭
    public boolean isWifi() {
        WifiManager wifiManager = (WifiManager) 
                                  getApplicationContext().getSystemService(WIFI_SERVICE);

        if(wifiManager.isWifiEnabled()) {
            return true;
        } else {
            return false;
        }
    }

2.开启连接指定的目标wifi(异)

(1)Android10以下连接方法,首先获取前端传入的两个参数,分别是wifi名称和wifi密码

//Android 10 以下版本wifi连接
    public boolean linkWifi(String ssid, String pass) {

        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);

        WifiConfiguration conf = new WifiConfiguration();

        //如果有连接隐藏wifi需求的话,增加conf.hiddenSSID = true这句代码,加上此句则可以检索到隐藏wifi
        //conf.hiddenSSID = true;

        conf.SSID = "\"" + networkSSID + "\"";

        //对于WPA网络密码采用以下输入方式
        conf.preSharedKey = "\"" + networkPass + "\"";
        wifiManager.addNetwork(conf);
        @SuppressLint("MissingPermission") List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for (WifiConfiguration i : list) {
            if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);
                wifiManager.reconnect();
                break;
            }
        }
        return true;
    }

(2)Android10以上连接方法(P2P),首先获取前端传入的两个参数,分别是wifi名称和wifi密码

public boolean linkWifi (String ssid, String pass) throws InterruptedException{
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q)
        {
            NetworkSpecifier specifier =
                    new WifiNetworkSpecifier.Builder()
                            .setSsidPattern(new PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
                            .setWpa2Passphrase(pass)
                            .build();

            NetworkRequest request =
                    new NetworkRequest.Builder()
                            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                            .setNetworkSpecifier(specifier)
                            .build();

            ConnectivityManager connectivityManager = (ConnectivityManager)
                    getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

            ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    //表示使用该网络
                    connectivityManager.bindProcessToNetwork(network);
                }

                @Override
                public void onUnavailable() {
                    return;
                }
            };
            connectivityManager.requestNetwork(request, networkCallback);
            // Release the request when done.
            // connectivityManager.unregisterNetworkCallback(networkCallback);
        }
        return true;
    }

3.断开当前所连接的wifi

    @RequiresApi(api = Build.VERSION_CODES.M)
    public boolean recoverywifi ()
    {
        //Android 10 以上断开方法
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
            ConnectivityManager connectivityManager =(ConnectivityManager)
                    getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
            connectivityManager.bindProcessToNetwork(null);
            WifiManager wifiManager = (WifiManager) 
                            getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            wifiManager.disconnect();
        }
        else{
            //Android 10 以下断开方法
            WifiManager wifiManager = 
               (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            wifiManager.disconnect();
        }
        return true;
    }

小结:Android10以上的手机调用连接wifi代码的时候都会出现弹窗,需要用户允许才能连接目标wifi,属于正常现象。硬件的配置、手机的性能、信号的强弱都会对连接wifi的速度有影响,所以连接过程中检索转圈属于正常现象。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uni-app是一款基于Vue.js开发的跨平台应用框架,可以用于快速开发同时支持多个平台的应用程序。uni-app提供了一种打包离线app的方式,可以将应用程序打包成原生的安装包,使得应用可以在手机上离线运行。 要打包离线app,首先需要在uni-app项目中进行相关配置。在项目的manifest.json文件中,可以设置app的名称、图标、启动页等信息。同时,还可以配置应用的权限、网络请求等。 接下来,需要选择目标平台进行打包uni-app支持多个平台,包括iOS、Android、H5、微信小程序等。根据不同的平台,可以选择相应的打包方式。 对于iOS平台,可以使用HBuilderX进行打包。在HBuilderX中,选择菜单栏的“发行”-“原生App-云打包”,然后按照提示进行相关配置,最后生成ipa文件即可。 对于Android平台,可以使用HBuilderX或者使用命令行进行打包。使用HBuilderX时,选择菜单栏的“发行”-“原生App-云打包”,然后按照提示进行相关配置,最后生成apk文件即可。使用命令行时,需要安装好Android SDK,并配置好环境变量,然后使用命令行工具执行相应的打包命令。 对于H5平台,可以直接将项目打包成一个静态网页,然后部署到服务器上即可。 对于微信小程序平台,可以使用HBuilderX进行打包。在HBuilderX中,选择菜单栏的“发行”-“小程序”,然后按照提示进行相关配置,最后生成小程序的代码即可。 总结一下,uni-app提供了多种打包离线app的方式,可以根据不同的平台选择相应的打包方式进行配置和生成安装包。通过这些步骤,就可以将uni-app项目打包离线app,使得应用可以在手机上离线运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值