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

作者&投稿:辟哑 (若有异议请与网页底部的电邮联系)
android蓝牙自动配对连接的具体代码如下:1.获取蓝牙适配器BluetoothAdapterblueadapter=BluetoothAdapter.getDefaultAdapter();如果BluetoothAdapter为null,说明android手机没有蓝牙模块。2.判断蓝牙模块是否开启,blueadapter.isEnabled()true表示已经开启,false表示蓝牙并没启用。3.启动配置蓝牙可见模式,即进入可配对模式Intentin=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);startActivity(in);,200就表示200秒。4.获取蓝牙适配器中已经配对的设备Setdevice=blueadapter.getBondedDevices();当然,还需要在androidManifest.xml中声明蓝牙的权限5.自动配对设置Pin值staticpublicbooleanautoBond(ClassbtClass,BluetoothDevicedevice,StringstrPin)throwsException{MethodautoBondMethod=btClass.getMethod("setPin",newClass[]{byte[].class});Booleanresult=(Boolean)autoBondMethod.invoke(device,newObject[]{strPin.getBytes()});returnresult;}6.开始配对请求staticpublicbooleancreateBond(ClassbtClass,BluetoothDevicedevice)throwsException{MethodcreateBondMethod=btClass.getMethod("createBond");BooleanreturnValue=(Boolean)createBondMethod.invoke(device);returnreturnValue.booleanValue();}

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

android蓝牙自动配对连接的具体代码如下:
1. 获取蓝牙适配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 为null,说明android手机没有蓝牙模块。
2. 判断蓝牙模块是否开启,blueadapter.isEnabled() true表示已经开启,false表示蓝牙并没启用。
3. 启动配置蓝牙可见模式,即进入可配对模式Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
4. 获取蓝牙适配器中已经配对的设备Set device=blueadapter.getBondedDevices();
当然,还需要在androidManifest.xml中声明蓝牙的权限



5.自动配对设置Pin值

static public boolean autoBond(Class btClass, BluetoothDevice device, String strPin)
throws Exception {
Method autoBondMethod = btClass.getMethod("setPin", new Class[] { byte[].class });
Boolean result = (Boolean) autoBondMethod
.invoke(device, new Object[] { strPin.getBytes() });
return result;
}

6.开始配对请求
static public boolean createBond(Class btClass, BluetoothDevice device) throws Exception {
Method createBondMethod = btClass.getMethod("createBond");
Boolean returnValue = (Boolean) createBondMethod.invoke(device);
return returnValue.booleanValue();
}

实现android蓝牙开发 自动配对连接,并不弹出提示框:源码 BluetoothDevice 类中还有两个隐藏方法:cancelBondProcess()和cancelPairingUserInput(),这两个方法一个是取消配对进程一个是取消用户输入下面是自动配对的代码Mainfest,xml注册<receiver android:name=".BluetoothConnectActivityReceiver" > <intent-filter> <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> </intent-filter> </receiver>自己在收到广播时处理并将预先输入的密码设置进去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(); } } } }<b>/************************************ 蓝牙配对函数 * **************/ 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(); } } }</b>执行时直接使用:<b>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; // 配对完毕就把这个设备对象传给全局的remoteDeviceresult = true;}catch (Exception e){// TODO Auto-generated catch blockLog.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; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDeviceresult = true;}catch (Exception e){// TODO Auto-generated catch blockLog.d("mylog", "setPiN failed!");e.printStackTrace();}}return result;}