如何实现android蓝牙开发 自动配对连接,并不弹出提示框
(2013-01-05 15:27:36)
标签:
杂谈 |
分类: 转摘文章 |
我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我。
在源码 BluetoothDevice 类中还有两个隐藏方法
cancelBondProcess()和cancelPairingUserInput()
这两个方法一个是取消配对进程一个是取消用户输入
下面是自动配对的代码
Mainfest,xml注册
1 |
<</code> |
2 |
<</code> |
3 |
<</code> |
4 |
</</code> |
5 |
</</code> |
自己在收到广播时处理并将预先输入的密码设置进去
01 |
public class BluetoothConnectActivityReceiver extends BroadcastReceiver |
02 |
{ |
03 |
04 |
String strPsw = "0" ; |
05 |
06 |
@Override |
07 |
public void onReceive(Context context, Intent intent) |
08 |
{ |
09 |
// TODO Auto-generated method stub |
10 |
if (intent.getAction().equals( |
11 |
"android.bluetooth.device.action.PAIRING_REQUEST" )) |
12 |
{ |
13 |
BluetoothDevice btDevice = intent |
14 |
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); |
15 |
16 |
// byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234"); |
17 |
// device.setPin(pinBytes); |
18 |
Log.i( "tag11111" , "ddd" ); |
19 |
try |
20 |
{ |
21 |
ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对 |
22 |
ClsUtils.createBond(btDevice.getClass(), btDevice); |
23 |
ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice); |
24 |
} |
25 |
catch (Exception e) |
26 |
{ |
27 |
// TODO Auto-generated catch block |
28 |
e.printStackTrace(); |
29 |
} |
30 |
} |
31 |
32 |
33 |
} |
34 |
} |
001 |
002 |
import java.lang.reflect.Field; |
003 |
import java.lang.reflect.Method; |
004 |
005 |
import android.bluetooth.BluetoothDevice; |
006 |
import android.util.Log; |
007 |
public class ClsUtils |
008 |
{ |
009 |
010 |
014 |
static public boolean createBond(Class btClass, BluetoothDevice btDevice) |
015 |
throws Exception |
016 |
{ |
017 |
Method createBondMethod = btClass.getMethod( "createBond" ); |
018 |
Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); |
019 |
return returnValue.booleanValue(); |
020 |
} |
021 |
022 |
026 |
static public boolean removeBond(Class btClass, BluetoothDevice btDevice) |
027 |
throws Exception |
028 |
{ |
029 |
Method removeBondMethod = btClass.getMethod( "removeBond" ); |
030 |
Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice); |
031 |
return returnValue.booleanValue(); |
032 |
} |
033 |
034 |
static public boolean setPin(Class btClass, BluetoothDevice btDevice, |
035 |
String str) throws Exception |
036 |
{ |
037 |
try |
038 |
{ |
039 |
Method removeBondMethod = btClass.getDeclaredMethod( "setPin" , |
040 |
new Class[] |
041 |
{ byte []. class }); |
042 |
Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice, |
043 |
new Object[] |
044 |
{str.getBytes()}); |
045 |
Log.e( "returnValue" , "" + returnValue); |
046 |
} |
047 |
catch (SecurityException e) |
048 |
{ |
049 |
// throw new RuntimeException(e.getMessage()); |
050 |
e.printStackTrace(); |
051 |
} |
052 |
catch (IllegalArgumentException e) |
053 |
{ |
054 |
// throw new RuntimeException(e.getMessage()); |
055 |
e.printStackTrace(); |
056 |
} |
057 |
catch (Exception e) |
058 |
{ |
059 |
// TODO Auto-generated catch block |
060 |
e.printStackTrace(); |
061 |
} |
062 |
return true ; |
063 |
064 |
} |
065 |
066 |
// 取消用户输入 |
067 |
static public boolean cancelPairingUserInput(Class btClass, |
068 |
BluetoothDevice device) |
069 |
070 |
throws Exception |
071 |
{ |
072 |
Method createBondMethod = btClass.getMethod( "cancelPairingUserInput" ); |
073 |
// cancelBondProcess() |
074 |
Boolean returnValue = (Boolean) createBondMethod.invoke(device); |
075 |
return returnValue.booleanValue(); |
076 |
} |
077 |
078 |
// 取消配对 |
079 |
static public boolean cancelBondProcess(Class btClass, |
080 |
BluetoothDevice device) |
081 |
082 |
throws Exception |
083 |
{ |
084 |
Method createBondMethod = btClass.getMethod( "cancelBondProcess" ); |
085 |
Boolean returnValue = (Boolean) createBondMethod.invoke(device); |
086 |
return returnValue.booleanValue(); |
087 |
} |
088 |
089 |
093 |
static public void printAllInform(Class clsShow) |
094 |
{ |
095 |
try |
096 |
{ |
097 |
// 取得所有方法 |
098 |
Method[] hideMethod = clsShow.getMethods(); |
099 |
int i = 0 ; |
100 |
for (; i < hideMethod.length; i++) |
101 |
{ |
102 |
Log.e( "method name" , hideMethod[i].getName() + ";and the i is:" |
103 |
+ i); |
104 |
} |
105 |
// 取得所有常量 |
106 |
Field[] allFields = clsShow.getFields(); |
107 |
for (i = 0 ; i < allFields.length; i++) |
108 |
{ |
109 |
Log.e( "Field name" , allFields[i].getName()); |
110 |
} |
111 |
} |
112 |
catch (SecurityException e) |
113 |
{ |
114 |
// throw new RuntimeException(e.getMessage()); |
115 |
e.printStackTrace(); |
116 |
} |
117 |
catch (IllegalArgumentException e) |
118 |
{ |
119 |
// throw new RuntimeException(e.getMessage()); |
120 |
e.printStackTrace(); |
121 |
} |
122 |
catch (Exception e) |
123 |
{ |
124 |
// TODO Auto-generated catch block |
125 |
e.printStackTrace(); |
126 |
} |
127 |
} |
128 |
} |
执行时直接使用:
01 |
|
02 |
{ |
03 |
boolean result = false ; |
04 |
BluetoothAdapter bluetoothAdapter = BluetoothAdapter |
05 |
.getDefaultAdapter(); |
06 |
07 |
bluetoothAdapter.cancelDiscovery(); |
08 |
09 |
if (!bluetoothAdapter.isEnabled()) |
10 |
{ |
11 |
bluetoothAdapter.enable(); |
12 |
} |
13 |
14 |
if (!BluetoothAdapter.checkBluetoothAddress(strAddr)) |
15 |
{ // 检查蓝牙地址是否有效 |
16 |
17 |
Log.d( "mylog" , "devAdd un effient!" ); |
18 |
} |
19 |
20 |
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr); |
21 |
22 |
if (device.getBondState() != BluetoothDevice.BOND_BONDED) |
23 |
{ |
24 |
try |
25 |
{ |
26 |
Log.d( "mylog" , "NOT BOND_BONDED" ); |
27 |
ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 |
28 |
ClsUtils.createBond(device.getClass(), device); |
29 |
remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice |
30 |
result = true ; |
31 |
} |
32 |
catch (Exception e) |
33 |
{ |
34 |
// TODO Auto-generated catch block |
35 |
36 |
Log.d( "mylog" , "setPiN failed!" ); |
37 |
e.printStackTrace(); |
38 |
} // |
39 |
40 |
} |
41 |
else |
42 |
{ |
43 |
Log.d( "mylog" , "HAS BOND_BONDED" ); |
44 |
try |
45 |
{ |
46 |
ClsUtils.createBond(device.getClass(), device); |
47 |
ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 |
48 |
ClsUtils.createBond(device.getClass(), device); |
49 |
remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice |
50 |
result = true ; |
51 |
} |
52 |
catch (Exception e) |
53 |
{ |
54 |
// TODO Auto-generated catch block |
55 |
Log.d( "mylog" , "setPiN failed!" ); |
56 |
e.printStackTrace(); |
57 |
} |
58 |
} |
59 |
return result; |
60 |
} |
android 蓝牙程序控制绑定与删除绑定
时间: 2024-10-09 22:18:37