安卓蓝牙开发Android 蓝牙开发怎么监听连对了

安卓蓝牙开发  时间:2021-09-19  阅读:()

android蓝牙通信要怎么设计

Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。

本文档描述了怎样利用android平台提供的蓝牙API去实现蓝压设备之间的通信。

蓝牙具有point-to-point 和 multipoint两种连接功能。

  使用蓝牙API,可以做到:   * 搜索蓝牙设备   * 从本地的Bluetooth adapter中查询已经配对的设备   * 建立RFCOMM通道   * 通过service discovery连接到其它设备   * 在设备之间传输数据   * 管理多个连接   基础知识   本文档介绍了如何使用Android的蓝牙API来完成的四个必要的主要任务,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备(配对的或可见的)、连接、传输数据。

  所有的蓝牙API在android.bluetooth包中。

实现这些功能主要需要下面这几个类和接口:   BluetoothAdapter   代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入口。

通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。

  BluetoothDevice   代表了一个远端的蓝牙设备, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。

(其信息是封装在 bluetoothsocket 中) 。

  BluetoothSocket   代表了一个蓝牙套接字的接口(类似于 tcp 中的套接字) ,他是应用程 序通过输入、输出流与其他蓝牙设备通信的连接点。

  BluetoothServerSocket   代表打开服务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。

当远端设备发起连 接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket 类将会返回一个 bluetoothsocket。

  BluetoothClass   描述了一个设备的特性(profile)或该设备上的蓝牙大致可以提供哪些服务(service),但不可信。

比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。

可以用它来进行一些UI上的提示。

  BluetoothProfile   BluetoothHeadset   提供手机使用蓝牙耳机的支持。

这既包括蓝牙耳机和免提(V1.5)模式。

  BluetoothA2dp   定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。

“A2DP的”代表高级音频分配模式。

  BluetoothHealth   代表了医疗设备配置代理控制的蓝牙服务   BluetoothHealthCallback   一个抽象类,使用实现BluetoothHealth回调。

你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。

  BluetoothHealthAppConfiguration   代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。

  BluetoothProfile.ServiceListener   当他们已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接口(即运行一个特定的配置文件,内部服务)。

  蓝牙权限   为了在你的应用中使用蓝牙功能,至少要在AndroidManifest.xml中声明两个权限:BLUETOOTH(任何蓝牙相关API都要使用这个权限) 和 BLUETOOTH_ADMIN(设备搜索、蓝牙设置等)。

  为了执行蓝牙通信,例如连接请求,接收连接和传送数据都必须有BLUETOOTH权限。

  必须要求BLUETOOTH_ADMIN的权限来启动设备发现或操纵蓝牙设置。

大多数应用程序都需要这个权限能力,发现当地的蓝牙设备。

此权限授予其他的能力不应该使用,除非应用程序是一个“电源管理”,将根据用户要求修改的蓝牙设置   注释:要请求BLUETOOTH_ADMIN的话,必须要先有BLUETOOTH。

  在你的应用manifest 文件中声明蓝牙权限。

例如:         ...      通过查看资料来声明应用权限获取更多的信息。

  蓝牙设置   在你的应用通过蓝牙进行通信之前,你需要确认设备是否支持蓝牙,如果支持,确信它被打开。

  如果不支持,则不能使用蓝牙功能。

如果支持蓝牙,但不能够使用,你刚要在你的应用中请求使用蓝牙。

这个要两步完成,使用BluetoothAdapter。

如何实现android蓝牙自动配对连接

下面是android蓝牙自动配对的代码 Mainfest,xml注册 自己在收到广播时处理并将预先输入的密码设置进去 public class BluetoothConnectActivityReceiver extends BroadcastReceiver { String strPsw = "0"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if (intent.getAction().equals( "android.bluetooth.device.action.PAIRING_REQUEST")) { BluetoothDevice btDevice = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234"); // device.setPin(pinBytes); Log.i("tag11111", "ddd"); try { ClsUtils.setPin(btDevice.getClass(), btDevice, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(btDevice.getClass(), btDevice); ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } /************************************ 蓝牙配对函数 * **************/ import java.lang.reflect.Field; import java.lang.reflect.Method; import android.bluetooth.BluetoothDevice; import android.util.Log; public class ClsUtils { /** * 与设备配对 参考源码:platform/packages/apps/Settings.git * /Settings//android/settings/bluetooth/CachedBluetoothDevice.java */ static public boolean createBond(Class btClass, BluetoothDevice btDevice) throws Exception { Method createBondMethod = btClass.getMethod("createBond"); Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); return returnValue.booleanValue(); } /** * 与设备解除配对 参考源码:platform/packages/apps/Settings.git * /Settings//android/settings/bluetooth/CachedBluetoothDevice.java */ static public boolean removeBond(Class btClass, BluetoothDevice btDevice) throws Exception { Method removeBondMethod = btClass.getMethod("removeBond"); Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice); return returnValue.booleanValue(); } static public boolean setPin(Class btClass, BluetoothDevice btDevice, String str) throws Exception { try { Method removeBondMethod = btClass.getDeclaredMethod("setPin", new Class[] {byte[].class}); Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice, new Object[] {str.getBytes()}); Log.e("returnValue", "" + returnValue); } catch (SecurityException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (IllegalArgumentException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } // 取消用户输入 static public boolean cancelPairingUserInput(Class btClass, BluetoothDevice device) throws Exception { Method createBondMethod = btClass.getMethod("cancelPairingUserInput"); // cancelBondProcess() Boolean returnValue = (Boolean) createBondMethod.invoke(device); return returnValue.booleanValue(); } // 取消配对 static public boolean cancelBondProcess(Class btClass, BluetoothDevice device) throws Exception { Method createBondMethod = btClass.getMethod("cancelBondProcess"); Boolean returnValue = (Boolean) createBondMethod.invoke(device); return returnValue.booleanValue(); } /** * * @param clsShow */ static public void printAllInform(Class clsShow) { try { // 取得所有方法 Method[] hideMethod = clsShow.getMethods(); int i = 0; for (; i < hideMethod.length; i++) { Log.e("method name", hideMethod[i].getName() + ";and the i is:" + i); } // 取得所有常量 Field[] allFields = clsShow.getFields(); for (i = 0; i < allFields.length; i++) { Log.e("Field name", allFields[i].getName()); } } catch (SecurityException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (IllegalArgumentException e) { // throw new RuntimeException(e.getMessage()); e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 执行时直接使用: public static boolean pair(String strAddr, String strPsw) { boolean result = false; BluetoothAdapter bluetoothAdapter = BluetoothAdapter .getDefaultAdapter(); bluetoothAdapter.cancelDiscovery(); if (!bluetoothAdapter.isEnabled()) { bluetoothAdapter.enable(); } if (!BluetoothAdapter.checkBluetoothAddress(strAddr)) { // 检查蓝牙地址是否有效 Log.d("mylog", "devAdd un effient!"); } BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr); if (device.getBondState() != BluetoothDevice.BOND_BONDED) { try { Log.d("mylog", "NOT BOND_BONDED"); ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(device.getClass(), device); remoteDevice = device; // 配对完毕就把这个设备对象传给全局的remoteDevice result = true; } catch (Exception e) { // TODO Auto-generated catch block Log.d("mylog", "setPiN failed!"); e.printStackTrace(); } // } else { Log.d("mylog", "HAS BOND_BONDED"); try { ClsUtils.createBond(device.getClass(), device); ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对 ClsUtils.createBond(device.getClass(), device); remoteDevice = device; // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice result = true; } catch (Exception e) { // TODO Auto-generated catch block Log.d("mylog", "setPiN failed!"); e.printStackTrace(); } } return result; }

Android蓝牙开发相关:一个客户端、服务器端都可以当的app,应该在什么时候开启我的服务器端的线程?

服务端的需要一直开着,等待客户端的想要连接时自己来连接,看起来有些像钓鱼的样子~ 蓝牙的话是这样,服务端一直开着,并把服务端所在的机子设置成可以被其他机子搜索,然后就等待其他机子的配对请求,若果在可被搜索的时间内内有其他机子访问,只能再次启动配对监听,直到配对成功为止

Android 蓝牙开发怎么监听连对了

BlueboothServerSocket类:代表打开服务连接来监听可能到来的连接请求(属于server端), 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。

当远端设备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回一个BluetoothSocket。

Sharktech:美国/荷兰独立服务器,10Gbps端口/不限流量/免费DDoS防护60G,319美元/月起

sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。此文只整理他们家10Gbps专用服务器,此外该系列所有服务器都受到高达 60Gbps(可升级到 100Gbps)的保护。...

vpsdime:夏日促销活动,美国达拉斯VPS,2G内存/2核/20gSSD/1T流量,$20/年

vpsdime怎么样?vpsdime是2013年注册的国外VPS主机商,实际上他还有一系列的其他域名站点如Winity.io, Backupsy,Cloudive, Virtora等等,母公司“Nodisto IT”相对来说还是很靠谱了的商家。VPSDime主要提供各种高配低价VPS套餐,其中Linux VPS和存储VPS基于OpenVZ架构,高级VPS基于KVM。VPSDime在上个季度的Low...

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

安卓蓝牙开发为你推荐
波粒高清波粒百万高清怎么样信息系统等级测评什么是信息安全等级保护,评测标准??rd640华为rd系列有哪些型号drs系统什么是ABS系统交通信号灯控制系统什么是智能交通信号灯洛奇英雄传s2洛奇英雄传传奇套装在第二季还会贵么高清网络球机高清网络半球摄像机、快球摄像机、枪机的区别在哪例外招聘深圳富市康还招工吗是不是只要女孩不要男孩的呢,待遇好吗?机柜生产厂河北省青县做机箱、机柜的厂子的老板怎么都姓朱呢?出处吧吧求此图的出处
北京vps 工信部域名备案 awardspace 博客主机 韩国加速器 美国php主机 ev证书 howfile 可外链网盘 服务器干什么用的 空间技术网 卡巴斯基免费试用 实惠 accountsuspended hosting 此网页包含的内容将不使用安全的https 香港打折信息 网络安装 留言板 更多