我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的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 |
} |
本文转载自:http://my.oschina.net/u/1049180/blog/298602