2***@qq.com
2***@qq.com
  • 发布:2021-01-15 10:45
  • 更新:2021-01-15 11:27
  • 阅读:1025

请问 蓝牙 的自动设置PIN码 功能该怎么实现。

分类:HBuilderX

蓝牙自动设置PIN码需要调用原生的setPIN方法,

但是需要传入 将PIN码 转为 Byte 数组。

原生平台 相关 代码如下

    static public boolean setPin(Class<? extends BluetoothDevice> btClass, BluetoothDevice btDevice,    
            String str) throws Exception    
    {    
        try    
        {    
            Method removeBondMethod = btClass.getDeclaredMethod("setPin", new Class[] {byte[].class});    
            Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice, new Object[]{str.getBytes()});    
            Log.e("returnValue", "" + returnValue);    
        }    
        catch (SecurityException e)    
        {    
            // throw new RuntimeException(e.getMessage());    
            e.printStackTrace();    
        }    
        catch (IllegalArgumentException e)    
        {    
            // throw new RuntimeException(e.getMessage());    
            e.printStackTrace();    
        }    
        catch (Exception e)    
        {    
            // TODO Auto-generated catch block    
            e.printStackTrace();    
        }    
        return true;    
     
    }  

其实是使用反射调用 setPin 方法,因为setPin是私有的方法。

plus.android.invoke 方法 可以直接调用,不需要反射。

所以 在js中自动设置PIN码 如下:

plus.android.invoke( BlueToothDevice , "setPin" , plus.android.invoke( PIN , "getBytes") );

但是会报如下错误:

java.lang.NullPointerException: Attempt to get length of null array;at android.bluetooth.BluetoothDevice.setPin

意思是空指针异常。

这个错误应该是表示 输入的PIN码是空的。

在JAVA中 Byte 数组:

打印出来的结果如下:

在JS中 创建的Byte数组如下:

实际上打印出来的是空的:

根据这个结果是不是可以说明 在JS 中 调用 setPin 的时候 实际上 PIN码 是找不到的。

如果是,那该如何解决呢。

如果不是,那自动设置PIN码改如何实现呢

2021-01-15 10:45 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com (作者)

之间直接调用时可以写入的,昨天再重测试的时候突然不行了。

代码没有修改 , 不知道是什么原因。

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