先来了解下Android传统蓝牙连接的大致简单的流程:

其中涉及到几个类依次来介绍,废话不多说,下面是从Android4.4开发指南蓝牙所用到的类的截图:

第一个类BluetoothAdapter:

注意两点:

1这是一个继承子Object的final类,不能进行继承。

2在系统为4.2及以下可以调用静态方法getDefaultAdapter()获取设备本地适配器;在系统为4.3及以上版本调用BluetoothManager的getAdapter()

类中其他重要方法:获取已经配对的设备--BluetoothDevices的set集合,开始发现设备--bool,创建侦听的RFCOMM安全/非安全通道

第二个类为BluetoothDevice:

远程蓝牙设备,可以通过UUID创建出BluetoothSocket(蓝牙套接字接口)对象,可以进行连接操作。

详细说明下createRfcommSocketToServiceRecord方法:

创建一个RFCOMM蓝牙套接字准备开始一个安全的传出连接到远程设备。返回的是BluetoothSocket对象

注意点:如果连接蓝牙串行板,尝试使用著名的UUID-00001101-0000-1000-8000-00805F9B34FB(一般固定的)然而若是一个Android对等体请使用自己生成的UUID

第三,四个类BluetoothSocket与BluetoothServerSocket

首先看下BluetoothSocket介绍:

蓝牙套接字接口类似tcp套接字(Socket与ServerSocket);

在服务端方面,使用一个BluetoothServerSocket来创建一个侦听的服务端套接字。当一个连接被BluetoothServerSocket接受,它将返回一个新的BluetoothSocket来管理连接;在客户端,使用单个BluetoothSocket来启动传出连接和管理连接。

最常见的蓝牙套接字类型是RFCOMM,这是Android API支持的类型。 RFCOMM是面向连接的,通过蓝牙的流传输。 它也称为串行端口配置文件(SPP)。

使用 BluetoothDevice.createRfcommSocketToServiceRecord()去创建一个BluetoothSocket连接一个已知的设备,然后通过他回调connect()与远程设备建立一个连接。

一旦套接字已连接,无论是连接为客户端还是连接为服务端,通过调用getInputStream()与getOutputStream()来分别检索InputStream对象,这些对象分别自动连接到套接字。

BluetoothSocket是线程安全的,另外,close() 方法将立即终止正在进行的操作和关闭套接字。

再来看下BluetoothServerSocket类:

其中有两个重载方法,一个可设置超时连接,方法阻塞,直到建立连接

返回值为BluetoothSocket对象可以管理连接,数据共享交互

第五个类为BluetoothClass:描述蓝牙设备的一般特征和功能,暂时用不到。

下面来介绍下具体连接蓝牙功能的代码实现:

思路:如果将蓝牙连接与数据通信部分放在Activity中,那么假如退出Activity,套接字也会随着activity关闭,而且每打开一次Activity又  要原样来一遍,又不稳定。有没有一中可以一直在后台运行的东西,可控制性的去管理它呢?

通过服务与广播机制来实现Activity与Service通信,Service启动方式有两种,一种是通过bindService(),另一种是通过startService(),

这两种启动方式的区别大家去清楚,bindService方式的服务随着调用者消亡而死亡;startService方式创建一次就会存在,除非  stopself()方法或者进程死亡。两种方式都可以实现与Activity交互,显然采用第二种方式更稳定,Activity与Service的通信采用广播机制  清晰简单。

原理介绍下:

下面贴下Demo代码:

1需要声明权限,android:exported指的是能否与其他程序交互,不能被访问则为false.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.likego.gobackbluetooth"><!--声明蓝牙权限!--><uses-permission android:name="android.permission.BLUETOOTH" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><serviceandroid:name=".BlueToothService"android:exported="false"></service></application></manifest>

 2.界面代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查找发现设备"android:id="@+id/lookBtn"android:layout_alignParentStart="true"android:layout_alignParentEnd="true" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="发送数据"android:id="@+id/sendBtn"android:layout_below="@+id/lookBtn"android:layout_alignParentStart="true"android:layout_alignParentEnd="true" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="清空数据"android:id="@+id/clearBtn"android:layout_below="@+id/sendBtn"android:layout_alignParentStart="true"android:layout_alignParentEnd="true" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:id="@+id/editText"android:text="返回结果:"android:singleLine="false"android:scrollbars="vertical"android:editable="false"android:focusable="false"android:layout_alignParentStart="true"android:layout_alignParentEnd="true"android:layout_below="@+id/clearBtn"android:layout_alignParentBottom="true"android:gravity="top" />
</RelativeLayout>

3.Activity代码-发现与查找设备,连接设备,发送数据等。

4.SerVice代码

转载于:https://www.cnblogs.com/lmf-techniques/p/6390012.html

蓝牙门禁Android客户端相关推荐

  1. android蓝牙门禁,BleAgent蓝牙门禁SDK文档

    个人笔记-蓝牙门禁sdk文档 导入包 //以下是在主module的build implementation 'com.zhy.core:BleLib:1.2.3' //此版本已经引用基础包 //以下是 ...

  2. android蓝牙门禁,1号社区APP互联门禁产品新开门方式说明

    原标题:1号社区APP互联门禁产品新开门方式说明 一.新开门方式版本详细说明 1.开门要素 苹果手机: 1)"设置"页面"手机开门"打开 2)手机打开蓝牙 3) ...

  3. onlyoffice 收费不_OMG!你家小区物业有没有这些乱收费的现象……|物业|物业管理|物业服务|门禁卡|停车费...

    蓝牙门禁卡要花钱买吗 请认真阅读,冷门省钱小知识来咯 滴滴滴~滴滴滴~ 前面开回自家小区的旁友们注意啦 今天我们聊聊你们回车库刷的蓝牙门禁卡 我堂堂小区大业主 花了钱买(租)了车位 小小一张蓝牙门禁卡 ...

  4. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  5. 安卓设备门禁识别开发_基于android手机的视频通话门禁控制系统

    龙源期刊网 http://www.qikan.com.cn 基于 android 手机的视频通话门禁控制系统 作者:陆海 李登辉 来源:<科教导刊 · 电子版> 2017 年第 34 期 ...

  6. 基于android的门禁系统代码,基于ESP8266 base on esp8266门禁系统 安卓源码

    基于ESP8266门禁系统安卓源码 视频中的小伙伴是我的搭档,负责硬件电路搭建,为了搭电路没少熬夜,挺感谢他的. 这是本人的毕业设计(专科)历时一个月完成.在做毕业设计之前一直在准备转本考试,考完试, ...

  7. 安卓设备门禁识别开发_基于Android和RFID的门禁管理系统

    基于 Android 和 RFID 的门禁管理系统 秦斌斌 ; 何极 ; 赵萌 ; 秦丽丽 [期刊名称] <无线通信技术> [年 ( 卷 ), 期] 2018(027)004 [摘要] 本 ...

  8. 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计)

    基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 文章目录 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 一.低功耗蓝牙(BLE)的配置和与FPGA通信代码 1.1 低功耗蓝牙的介 ...

  9. android蓝牙设计与实现,一个Android客户端的蓝牙支付系统设计与实现

    摘要: 本文实现了一种利用Android系统上的蓝牙技术,完成用户间资金流动的功能.本功能基于一个电子钱包客户端,本人希望以此来拓展电子钱包支付的途径,给用户提供一种新的便捷.安全的支付渠道.并希望借 ...

  10. android beam小米,小米手机自定义空白卡模拟加密卡门禁卡教程

    小米手机自定义空白卡模拟加密卡门禁卡教程,使用MIUI自带门卡模拟功能,并尝试烧录完整数据,不依赖任何第三方软件.不会对系统做什么恶,意,修,改,也不会对其他依赖NFC的服务(小米公交.Mi Pay银 ...

最新文章

  1. 解析codepage和charset的含义及其应用
  2. 机器学习基础专题:随机变量
  3. UVA 10405 - Longest Common Subsequence
  4. Spring Boot使用缓存功能
  5. selenium2与python自动化4-css元素定位
  6. 关于z-index的总结
  7. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
  8. 请解释Spring Bean 的生命周期?
  9. 结构体07:结构体案例1
  10. 经纬度转换器_FME应用小实例:线面经纬度集合快速转几何图形
  11. HDU 2206 JAVA
  12. Python爬取第一电影天堂最新电影(5000多部)代码实例(一)
  13. 亲爱的热爱的百度云全集资源
  14. 理解模块化和依赖管理(一)
  15. zepoto.js的使用
  16. 点击计算机直接隐藏到任务栏,win7电脑的任务栏被自动隐藏了怎么办?
  17. 【安全】Web指纹识别
  18. PHP获取唯一标识UUID
  19. 如何初步部署服务器(运维及服务器部署个人笔记)
  20. shapenet数据集_三维形状数据的深度特征表示

热门文章

  1. Python比较两个数字的大小一种有趣的做法
  2. 【附源码】Java计算机毕业设计网上博物馆设计(程序+LW+部署)
  3. 雅虎与积分卡公司信息同步 用户隐私保护引争议
  4. 实例化需求:团队如何交付正确的软件
  5. C语言求两个整数的最大公约数和最小公倍数
  6. (智力题)你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
  7. SitePoint PDF上没有更多密码!
  8. qmake language defined(name[, type])函数
  9. full decommisson of JDC- windows meta disk
  10. 简洁精美源于分析透彻,构思明确、求精,逻辑练达。(6)