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

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

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

时间: 2024-10-09 22:18:37

android 蓝牙程序控制绑定与删除绑定的相关文章

android服务unbind之后再想绑定问题

突然遇到个问题, 问题描述: 我按照顺序来绑定一个服务:start->bind 最后在退出activity的时候unbind一下, 现在我有这样的业务需求,就是当我再次进入该activity时需要再次bind, 我发现再调用bind方法并不能绑定服务(不知道google工程师为啥要设计成这样.) 写了一段测试代码验证一下: Service: package org.load.testservice; import android.app.Service; import android.conte

Android Service组件在新进程绑定(bindService)过程

1.首先看两个例子 (1)进程内 Client端 public class CounterService extends Service implements ICounterService { ...... public class CounterBinder extends Binder { public CounterService getService() { return CounterService.this; } } ...... } Server端 public class Ma

Android Service组件在进程内绑定(bindService)过程

本文参考Android应用程序绑定服务(bindService)的过程源代码分析http://blog.csdn.net/luoshengyang/article/details/6745181和<Android系统源代码情景分析>,作者罗升阳 一.Android Service组件在进程内绑定(bindService)过程 0.总图流程图如下: 1.Counter和CounterService所在应用程序主线程向ActivityManagerService进程发送BIND_SERVICE_T

在 UITextField 中添加删除绑定(绑定删除)

要解决的问题 在输入框中,需要整体删除诸如 “[email protected]” 或 “@xxxx” 等文本 实现思路 在删除动作时,获取到当前光标的位置,如果在光标正在处在上述文本范围内,就删除一整串文本 如何实现 (仅用 UITextField 示例, UITextView 实现原理是一样的) 为 UITextField 的 UITextFieldDelegate 实现  - (BOOL)textField:(UITextField *)textField shouldChangeChar

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

如何实现android蓝牙开发 自动配对连接,并不弹出提示框 之前做一个android版的蓝牙,遇到最大的难题就是自动配对. 上网查资料说是用反射createBond()和setPin(),但测试时进行配对还是会出现提示,但配对是成功了 我就开始查找怎么关闭这个蓝牙配对提示框,后面还是伟大的android源码帮助了我. 在源码 BluetoothDevice 类中还有两个隐藏方法 cancelBondProcess()和cancelPairingUserInput() 这两个方法一个是取消配对进

[Android]蓝牙系统

1.1 蓝牙技术简介 蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其"统一"的含义,用来意在统一无线局域网通讯的标准的蓝牙技术.蓝牙技 术是爱立信,IBM,Intel等世界5家著名大公司在1998年联合推出的一项无线通讯规范.随后成立的蓝牙技术特殊兴趣组织(SIG)来负责该技术的 开发和技术协议的制定,如今全世界已有1800多家公司加盟该组织,最近微软公司也正式加盟并成为SIG组织的领导成员之一.它以低成本的近距离无线连接 为基础,为移动通信设备建立一个短程无

ym——物联网入口之一Android蓝牙4.0

如果还有同学不知道蓝牙4.0可以做什么请查看Android+蓝牙 4.0 将带来什么?,现在可以穿戴设备也大多用的是蓝牙4.0,如 智能体质秤,智能手环,智能血压计等等. 安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备.查询服务和读写特性.相比传统的蓝牙,BLE更显著的特点是低功耗.这一优点使android App可以与具有低功耗要求的BLE设备通信,如近距离传感器.心脏速率监视器.健身设备等. 关键术语和概念 Generic Attribute P

深入了解Android蓝牙Bluetooth——《基础篇》

什么是蓝牙? ??也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的.利用"蓝牙"技术,能够有效地简化掌上电脑.笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备与因特网Internet之间的通信,从而使这些现代通信设备与因特网之间的数据传输变得更加迅速高效,为无线通信拓宽道路. 蓝牙版本的介绍 ??蓝牙发展至今经历了8个版本的更新.1.1.1.2.2.0.2.1.3.0.4.0.4.1.4.2

Android 蓝牙开发(四)OPP传输文件

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/70256004 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛 即可关注 Android蓝牙功能(传统蓝牙.ble.hid)这三方面功能之前的博客都已经写了.现在接着了解蓝牙OPP传输文件相关功能.Android手机使用中,经常会用到通过蓝牙分享文件给附近的朋友.那么具体是如何实现的,大部分朋友都不是很清楚.看一下源码