蓝牙自动设置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码改如何实现呢