安卓蓝牙开发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。

IMIDC彩虹数据:日本站群多ip服务器促销;30Mbps带宽直连不限流量,$88/月

imidc怎么样?imidc彩虹数据或彩虹网络现在促销旗下日本多IP站群独立服务器,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制月流量!IMIDC又名为彩虹数据,rainbow cloud,香港本土运营商,全线产品都是商家自营的,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非...

美国多IP站群VPS商家选择考虑因素和可选商家推荐

如今我们很多朋友做网站都比较多的采用站群模式,但是用站群模式我们很多人都知道要拆分到不同IP段。比如我们会选择不同的服务商,不同的机房,至少和我们每个服务器的IP地址差异化。于是,我们很多朋友会选择美国多IP站群VPS商家的产品。美国站群VPS主机商和我们普通的云服务器、VPS还是有区别的,比如站群服务器的IP分布情况,配置技术难度,以及我们成本是比普通的高,商家选择要靠谱的。我们在选择美国多IP...

老薛主机入门建站月付34/月,年付345元,半价香港VPS主机

老薛主机怎么样?老薛主机这个商家有存在有一些年头。如果没有记错的话,早年老薛主机是做虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站业务所以能持续到现在。这不,站长看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港vps主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港vps。点击进入...

安卓蓝牙开发为你推荐
产品涨价通知提价通知怎么写剑灵服务器剑灵现在哪个区服务器的人多,有新服务器吗?宾馆客房管理系统什么是酒店客房智能控制系统 ???平顶山教务管理系统河南省教师教育培训管理系统如何操作?湖北教育电视台直播在线观看湖北电视台争分夺秒视频,湖北电视台网上在线直播观看,湖北电视台网站?出处吧吧求此图的出处网络培训系统怎样进入百万公众网络学习工程"?web移动端开发WEB移动端开发使用什么框架比较好?四川大学教务处四川大学物理学院教务处电话是多少杭州电子科技大学地址杭州电子科技大学在哪?旁边有什么学校?
北京域名注册 成都主机租用 edis 优惠码 unsplash 华为云主机 html空间 泉州电信 微软服务器操作系统 安徽双线服务器 vul 美国盐湖城 成都主机托管 阵亡将士纪念日 cdn服务 mteam crontab 留言板 瓦工招聘 ddos攻击 更多