更新记录

1.1(2020-08-27)

1.修复ios版本,配网闪退问题。

1.0(2020-08-21)

版本发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 适用版本区间:9 - 14

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


说明

IOS Android双端支持

本插件应用于基本esp32 blufi协议配网app

数据说明请参数 !https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/blufi.html

本插件只支持2.4G wifi配网

本插件只支持2.4G wifi配网

本插件只支持2.4G wifi配网

ios打包时,如果需要用本插件获取 ios连接的wifi名称 需要增加额外的配制 manifest.json->app-plug->distribute->ios->节点下加下如下配制:

"capabilities" : { "entitlements" : { "com.apple.developer.networking.wifi-info" : true }, // 合并到工程entitlements文件的数据(json格式)
// "com.apple.developer.networking.wifi-info":"true" "plists" : {} },

添加这个配制后,ios打包时所用的证书也应包含 wifi access information

插件说明

1.初始化插件

let nativeBluefi = uni.requireNativePlugin('HG-Blufi') 

2.查找指定蓝牙设备(filter可不传,需要自己过滤)

const State_Blue_Connected = 1;
const State_Blue_DisConnect = 2;
const State_Blue_set_mtu_success = 3;
const State_Blue_set_mtu_failed = 4;
const State_Blue_discoverd_noservice = 5;
const State_Blue_discoverd_service = 6;
const State_Blue_find_write_charactor = 7;
const State_Blue_not_find_write_charactor = 8;
const State_Blue_not_find_notify_charactor = 9;
const State_Blue_set_security_success = 10;
const State_Blue_set_security_failed = 11;
const State_Blue_post_config_success = 12;
const State_Blue_post_config_failed = 13;
const State_Blue_device_reponse_success = 14;
const State_Blue_device_reponse_failed = 15;
const State_device_scan_result_success = 16;
const State_device_scan_result_failed = 17;
const State_device_get_version_success = 18;
const State_device_get_version_failed = 19;
const State_device_send_data_success = 20;
const State_device_send_data_failled = 21;
const State_device_rec_data_success = 22;
const State_device_rec_data_failled = 23;
const State_device_other_error = 24;
const State_scan_result = 0;
const State_Blue_Prepared_for_wifi_config = 25;
const State_scan_begin = -1;
  nativeBluefi.scan({
      filter:'过滤设备名称'
  },(ret)=>{
    if (ret.status == State_device_scan_result_success) { //找到蓝牙

    } else if (ret.status == State_Blue_Connected) { //蓝牙连接成功
    } else if (ret.status == State_Blue_DisConnect) { //断开连接
    } else if (ret.status == State_Blue_set_security_success) { //状态准备好了
    } else if (ret.status == State_scan_result) { //扫描结束了
    else if(ret.status == State_Blue_discoverd_service){ //发现服务成功
    }else if(ret.status == State_Blue_set_mtu_success){ //修改mtu成功
    }else if(ret.status == State_Blue_post_config_success){//发送配网数据成功
    }else if(ret.status == State_Blue_device_reponse_success){//收到设备配网信息
    }else if(ret.status == State_device_rec_data_success){//收到蓝牙发送过来的数据
    }else if(ret.status == State_scan_begin){//开始扫描
    }
  });

3. 停止搜所

nativeBluefi.stopScan();

4.开始连接

nativeBluefi.connect("设备ID  ios版本为UUID");

5.发送配网信息(wifi ssdid与password) 注意目前只支持2.4G网络

let config = {
        mode:0x01,//加密方式 (固定)
        sta_ssid:"2.4G_wifi", 
        sta_password:password
    }

    wifiInfo = {
        ssid:options.ssid,
        password:options.password
    }

    //开始配制网络
    nativeBluefi.configureOptions(config);

6.发送自定义数据

nativeBluefi.postCustomData("{data:'我是测试数据'}");

7.配网完成后,需要断开 (如果不断开 ,一般远程设备也会主动断开 )

nativeBluefi.close();

8.配网完成 (Happy)

额外api (获取当前连接wifi信息)

function loadWifiInfo(){  
    if(uni.getSystemInfoSync().platform === "android"){
        console.log("开始获取android wifi 连接信息");
        var Context = plus.android.importClass("android.content.Context");
           var WifiManager = plus.android.importClass("android.net.wifi.WifiManager")  
           var wifiManager = plus.android.runtimeMainActivity().getSystemService(Context.WIFI_SERVICE);  
           var WifiInfo = plus.android.importClass("android.net.wifi.WifiInfo");  
        //    var ArrayList = plus.android.importClass("java.util.ArrayList");  
        //    var ScanResult = plus.android.importClass("android.net.wifi.ScanResult");     
        //    var wifis = new ArrayList();  
        //    wifis = wifiManager.getScanResults();  

            var  wifiInfo =  wifiManager.getConnectionInfo();
          return wifiInfo.getSSID();
    }

    else{
        console.log("开始获取IOS wifi 连接信息");
        let Esp32BlufiModule = plus.ios.importClass("Esp32BlufiModule");

        let wifiInfo =   Esp32BlufiModule.getWifiName();

        console.log("IOS  current wifi name:"+wifiInfo);

        return wifiInfo;
    }

}

9. android打开蓝牙方法(IOS打开蓝牙为系统私有api调用后会对上加appstore有影响,不提供,有需要的可以自行百度)

function openBluetoothDevice() {
    let app = getApp();
    if (uni.getSystemInfoSync().platform === 'android') {
        let main = plus.android.runtimeMainActivity();
        let Context = plus.android.importClass("android.content.Context");
        let BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
        plus.android.importClass(BManager); //引入相关的method函数
        BAdapter = BManager.getAdapter();
        plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEnabled函数支持
        if (!BAdapter.isEnabled()) {
            BAdapter.enable();
        }
        console.log("蓝牙设备 是否打开:"+ BAdapter.isEnabled());
    }
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

1. 蓝牙权限 2. 网络权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问