文档章节

android 蓝牙程序控制绑定与删除绑定

andyhe91
 andyhe91
发布于 2014/08/06 16:20
字数 881
阅读 5500
收藏 10

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

 (2013-01-05 15:27:36)

转载

标签: 

杂谈

分类: 转摘文章

我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我。

在源码 BluetoothDevice 类中还有两个隐藏方法

cancelBondProcess()和cancelPairingUserInput()

这两个方法一个是取消配对进程一个是取消用户输入

下面是自动配对的代码

Mainfest,xml注册

 

1 <</code>receiver android:name=".BluetoothConnectActivityReceiver" >
2     <</code>intent-filter>
3         <</code>action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
4     </</code>intent-filter>
5 </</code>receiver>

自己在收到广播时处理并将预先输入的密码设置进去

 

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 public static boolean pair(String strAddr, String strPsw)
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     }


© 著作权归作者所有

共有 人打赏支持
上一篇: mac下好的工具
andyhe91
粉丝 58
博文 129
码字总数 209109
作品 0
长沙
私信 提问
加载中

评论(1)

天外的星星
请问一下,BroadcastReceiver和那个直接使用的代码必须都设置么?那个取消用户输入框的方法会直接中断已经绑定的蓝牙啊!
Android 蓝牙栈 bluez 使用方法

在现代智能手机领域,蓝牙功能已经显得很常用了,那么Android应用程序开发过程中对于蓝牙怎么开发,今天先给大家介绍Android的蓝牙栈bluez使用方法。 很多开发人员在最新的Android 0.9 SDK中...

无鸯
2011/09/15
3.3K
0
Android 蓝牙 API 之 BluetoothAdapter 类

使用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,...

无鸯
2011/09/06
2.6K
1
Android开发_android权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/9389879 访问登记属性 android.permission.ACCESSCHECKINPROPERTIES ,读取或写...

张腾元_Ternence
2013/07/20
0
0
Android蓝牙开发【八】hfp接听、挂断电话

继续研究hfp相关功能。蓝牙耳机可以控制手机接听、拒接、挂断电话,拨打电话等功能。本文主要分析下起这些操作的大致流程。 在系统应用Bluetooth中comandroidbluetooth.cpp提供了多个回调方法...

天王盖地虎626
01/09
0
0
BLE4.0配对绑定过程的底层剖析

一、实验目的 1、了解主从配对绑定的过程中底层是怎么运行的; 二、说明 1、关于配对于绑定,网上查了很多资料都没查到什么,问了很多人也没有回答的,所以我决定自己深入了解底层关于配对与...

lxllinux
2018/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 我都想和他们组成一个家庭了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @Sharon啊 :分享王菲的单曲《流年》有生之年狭路相逢终不能幸免,手心突然忽然长出纠缠的曲线。 《流年》- 王菲 手机党少年们想听歌,请使劲...

小小编辑
今天
363
12
CentOS7利用systemctl添加自定义系统服务

CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下. CentOS7的每...

linuxprobe16
今天
1
0
RabbitMQ入门

RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间...

watermelon11
今天
19
0
今天的学习

自动加载:方法一 function __autoload( $className ){在这里,完成加载B这个类文件的工作。}class A{} //这是一个类$a1 = new A(); //这里没有自动加载的发生,因为A这个类...

墨冥
今天
4
0
印刷工艺步骤

印刷厂从收到订单到交付整个流程,一般涉及到以下步骤 1.设计(经过软件如cdr,psd,ai等等设计需要印刷的名片,宣传单,画册等物料); 2.排版拼版(在电脑软件这区域完成); 3.出版、出硫...

focusone
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部