如何实现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 |
}
|