700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android 提示蓝牙无法配对 如何实现android蓝牙开发 自动配对连接 并不弹出提示框...

android 提示蓝牙无法配对 如何实现android蓝牙开发 自动配对连接 并不弹出提示框...

时间:2020-12-15 23:29:02

相关推荐

android 提示蓝牙无法配对 如何实现android蓝牙开发 自动配对连接 并不弹出提示框...

之前做一个android版的蓝牙 与血压计通讯的项目,遇到最大的难题就是自动配对.

上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了

我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我。

在源码 BluetoothDevice 类中还有两个隐藏方法

cancelBondProcess()和cancelPairingUserInput()

这两个方法一个是取消配对进程一个是取消用户输入

下面是自动配对的代码

Mainfest,xml注册

自己在收到广播时处理并将预先输入的密码设置进去

public class BluetoothConnectActivityReceiver extends BroadcastReceiver

{

String strPsw = "0";

@Override

public void onReceive(Context context, Intent intent)

{

// TODO Auto-generated method stub

if (intent.getAction().equals(

"android.bluetooth.device.action.PAIRING_REQUEST"))

{

BluetoothDevice btDevice = intent

.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

// byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234");

// device.setPin(pinBytes);

Log.i("tag11111", "ddd");

try

{

ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对

ClsUtils.createBond(btDevice.getClass(), btDevice);

ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice);

}

catch (Exception e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

/************************************ 蓝牙配对函数 * **************/

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import android.bluetooth.BluetoothDevice;

import android.util.Log;

public class ClsUtils

{

/**

* 与设备配对 参考源码:platform/packages/apps/Settings.git

* /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java

*/

static public boolean createBond(Class btClass, BluetoothDevice btDevice)

throws Exception

{

Method createBondMethod = btClass.getMethod("createBond");

Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);

return returnValue.booleanValue();

}

/**

* 与设备解除配对 参考源码:platform/packages/apps/Settings.git

* /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java

*/

static public boolean removeBond(Class btClass, BluetoothDevice btDevice)

throws Exception

{

Method removeBondMethod = btClass.getMethod("removeBond");

Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice);

return returnValue.booleanValue();

}

static public boolean setPin(Class 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;

}

// 取消用户输入

static public boolean cancelPairingUserInput(Class btClass,

BluetoothDevice device)

throws Exception

{

Method createBondMethod = btClass.getMethod("cancelPairingUserInput");

// cancelBondProcess()

Boolean returnValue = (Boolean) createBondMethod.invoke(device);

return returnValue.booleanValue();

}

// 取消配对

static public boolean cancelBondProcess(Class btClass,

BluetoothDevice device)

throws Exception

{

Method createBondMethod = btClass.getMethod("cancelBondProcess");

Boolean returnValue = (Boolean) createBondMethod.invoke(device);

return returnValue.booleanValue();

}

/**

*

* @param clsShow

*/

static public void printAllInform(Class clsShow)

{

try

{

// 取得所有方法

Method[] hideMethod = clsShow.getMethods();

int i = 0;

for (; i < hideMethod.length; i++)

{

Log.e("method name", hideMethod[i].getName() + ";and the i is:"

+ i);

}

// 取得所有常量

Field[] allFields = clsShow.getFields();

for (i = 0; i < allFields.length; i++)

{

Log.e("Field name", allFields[i].getName());

}

}

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();

}

}

}

执行时直接使用:

public static boolean pair(String strAddr, String strPsw)

{

boolean result = false;

BluetoothAdapter bluetoothAdapter = BluetoothAdapter

.getDefaultAdapter();

bluetoothAdapter.cancelDiscovery();

if (!bluetoothAdapter.isEnabled())

{

bluetoothAdapter.enable();

}

if (!BluetoothAdapter.checkBluetoothAddress(strAddr))

{ // 检查蓝牙地址是否有效

Log.d("mylog", "devAdd un effient!");

}

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr);

if (device.getBondState() != BluetoothDevice.BOND_BONDED)

{

try

{

Log.d("mylog", "NOT BOND_BONDED");

ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对

ClsUtils.createBond(device.getClass(), device);

remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice

result = true;

}

catch (Exception e)

{

// TODO Auto-generated catch block

Log.d("mylog", "setPiN failed!");

e.printStackTrace();

} //

}

else

{

Log.d("mylog", "HAS BOND_BONDED");

try

{

ClsUtils.createBond(device.getClass(), device);

ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对

ClsUtils.createBond(device.getClass(), device);

remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice

result = true;

}

catch (Exception e)

{

// TODO Auto-generated catch block

Log.d("mylog", "setPiN failed!");

e.printStackTrace();

}

}

return result;

}

来源:oschina

链接:/u/106603/blog/62975

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。