蓝牙自动输入配对码

    技术2022-05-18  8

     package com.xys.mets.common.bluetooth; /*********************************** * 蓝牙配对函数 * **************/ import java.lang.reflect.Field; import java.lang.reflect.Method; import android.bluetooth.BluetoothDevice; import android.util.Log; public class ClsUtils { /** * 涓庤澶囬厤瀵�鍙傝�婧愮爜锛歱latform/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(); } /** * 涓庤澶囪В闄ら厤瀵�鍙傝�婧愮爜锛歱latform/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; } /** * * @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 {     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    {    remoteDevice = device; //如果绑定成功,就直接把这个设备对象传给全局的remoteDevice    result=true;   }  return result; }

     


    最新回复(0)