1***@qq.com
1***@qq.com
  • 发布:2020-12-22 12:17
  • 更新:2020-12-24 10:55
  • 阅读:771

【报Bug】native.js 搜索周边蓝牙时, 在2.9.8中可以, 但是在3.0.0中不行

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 家庭中文版

HBuilderX类型: 正式

HBuilderX版本号: 3.0.0

手机系统: Android

手机系统版本号: Android 10

手机厂商: 华为

手机机型: Mate 30

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

var bArray = [];
function scanBluetoothDevice(callback){
//获取android应用Activity对象
var main = plus.android.runtimeMainActivity();
//过滤器
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
//蓝牙设备
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
//蓝牙适配器
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");

var filter = new IntentFilter();    
var BDevice = new BluetoothDevice();    
//蓝牙本地适配器    
var BAdapter = BluetoothAdapter.getDefaultAdapter();    

// 判断是否开启蓝牙    
if(!BAdapter.isEnabled()) {    
    BAdapter.enable(); //启动蓝牙    
}    
BAdapter.startDiscovery(); //开启搜索    

var receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {    
    onReceive: function(context, intent) { //回调    
        try {                   
            plus.android.importClass(intent); //通过intent实例引入intent类    
            if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {    
                main.unregisterReceiver(receiver); //取消监听       
            } else {    
                //从Intent中获取设备对象    
                BDevice= intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);    

                if(BDevice == null) {    
                    main.unregisterReceiver(receiver); //取消监听    
                    return;    
                }    

                var name=BDevice.getAddress()+BDevice.getName();    
                if(bArray.indexOf(name) == -1){     //去重    
                    bArray.push(name);    
                    callback({    
                        "name": BDevice.getName(),    
                        "SN": BDevice.getAddress()    
                    });     
                }    

            }    
        } catch(e) {    
            console.error(e);    
        }    
    }    
});    

//main.unregisterReceiver(receiver); //取消监听,这一步可以不需要    

filter.addAction(BDevice.ACTION_FOUND);    
filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);    
filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);    
filter.addAction(BAdapter.ACTION_STATE_CHANGED);    
main.registerReceiver(receiver, filter); //注册监听     

}

操作步骤:

3.0.0 可以搜到蓝牙

预期结果:

3.0.0 可以搜到蓝牙

实际结果:

3.0.0 可以搜到蓝牙

bug描述:

native.js 搜索周边蓝牙时, 在2.9.8中可以.
但是在3.0.0中不行,广播貌似没触发, receiver 未执行 ,
使用的代码见代码示例.
是文档: https://ask.dcloud.net.cn/article/937 里面的

2020-12-22 12:17 负责人:DCloud_Android_ST 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

为什么不使用uniapp蓝牙模块?不好用?

  • 1***@qq.com (作者)

    在项目开发时, 用的蓝牙模块,

    但是遇到了些问题, 就该用这个方法了.

    目前APP的用户也有一定的量, 这个方法也没出问题, 所以就一直沿用.

    2020-12-22 16:14

  • DCloud_Android_ST

    回复 DCloud_Android_ST: 建议使用uniapp的蓝牙模块

    2020-12-22 16:38

  • 1***@qq.com (作者)

    回复 DCloud_Android_ST: 之前版本都正常的,现在版本有问题, 说明你们这次的升级不兼容之前的, 这只是发现的, 还有未发现的呢, 这个bug你要不要看一下啊

    2020-12-22 17:42

  • DCloud_Android_ST

    回复 1***@qq.com: 嗯 已确认

    2020-12-22 17:59

DCloud_Android_ST

DCloud_Android_ST

HX3.0.1已修复该问题

  • 1***@qq.com (作者)

    好的 谢谢!

    2020-12-25 19:20

  • 1***@qq.com (作者)

    您好,

    现在可以连接成功, 但是获取getInputStream或者getOutputStream无法读取其内容:

    var outputStream = bluetoothSocket.getOutputStream();

    plus.android.importClass(outputStream);


              var inputStream = bluetoothSocket.getInputStream();  
    plus.android.importClass(inputStream);
    inputStream.available(); 返回0, 但是在HX2.9.8的基座中可以得到正常的数字, 麻烦您看下

    2020-12-31 22:12

  • DCloud_Android_ST

    回复 1***@qq.com: 把完整示例提供下 省的一次次报问题

    2021-01-04 10:54

该问题目前已经被锁定, 无法添加新回复