android 蓝牙配对

来源:互联网 发布:网络型智能车位锁 编辑:程序博客网 时间:2024/04/29 06:45

/*******

蓝牙配对

*******/

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

 

/****************************************************

使用方法

strAddr:配对的蓝牙MAC地址

strPsw:配对的蓝牙密码

****************************************************/

public static boolean pair(String strAddr, String strPsw ,Context context)
 {
  boolean result = false;
  BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); //取得本地

  bluetoothAdapter.cancelDiscovery();

  if (bluetoothAdapter!=null && !bluetoothAdapter.isEnabled())
  {
//   bluetoothAdapter.enable();
   Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
   context.startActivity(enabler);
  }
  
  Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();      
     for (BluetoothDevice device : pairedDevices) {   
      Log.e("pairedDevices", device.getName() + "  ---  " + device.getAddress());
     }

  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);
   
    
    BluetoothDevice remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice
    Log.e("xixi", remoteDevice.getName()+"   "+remoteDevice.getAddress());

       
    //BluetoothDevice 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
    BluetoothSocket mybluetoothSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
    mybluetoothSocket.connect();
    
    
    
    result = true;
   }
   catch (Exception e)
   {
    // TODO Auto-generated catch block
    Log.d("mylog", "setPiN failed!");
    e.printStackTrace();
   }
  }
  return result;
 }

 

 

 

原创粉丝点击