• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth

安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了bluetooth蓝牙耳机,bluetooth蓝牙驱动,bluetooth蓝牙音箱,蓝牙bluetooth,蓝牙bluetooth v4.0等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth


一:蓝牙设备之间的通讯首要包含了四个进程

设置蓝牙设备
寻觅局域网内也许或许匹配的设备
衔接设备
设备之间的数据传输

二:详细编程完结

1. 发动蓝牙功用

首要经过调用静态办法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,假如回来为空,则无法继续执行了。例如安卓源码:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { // Device does not support Bluetooth }

其次,调用isEnabled()来查询当时蓝牙设备的状况,假如回来为false,则表明蓝牙设备没有敞开,接下来你需求封装一个ACTION_REQUEST_ENABLE恳求到intent里面,调用startActivityForResult()办法使能蓝牙设备,例如:

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

2. 查找设备

运用BluetoothAdapter类里的办法,你能够查找远端设备(大约十米以内)或许查询在你手机上现已匹配(或许说绑定)的别的设备了。当然需求断定对方蓝牙设备现已敞开或许现已敞开了“被发现使能”功用(对方设备是能够被发现的是你能够建议衔接的前提条件)。假如该设备是能够被发现的,会反馈回来一些对方的设备信息,比方姓名、MAC地址等,运用这些信息,你的设备就能够挑选去向对方初始化一个衔接。 
假如你是首次与该设备衔接,那么一个配对的恳求就会主动的显示给用户。当设备配对好今后,他的一些根本信息(首要是姓名和MAC)被保留下来并能够运用蓝牙的API来读取。运用已知的MAC地址就能够对远端的蓝牙设备建议衔接恳求。 
匹配好的设备和衔接上的设备的不同点:匹配好仅仅阐明对方设备发现了你的存在,并具有一个一起的识别码,而且能够衔接。衔接上:表明当时设备同享一个RFCOMM信道而且两者之间能够交换数据。也即是是说蓝牙设备在树立RFCOMM信道之前,有必要是现已配对好了的。

3. 查询匹配好的设备

在树立衔接之前你有必要先查询配对好了的蓝牙设备集以便挑选一个设备进行通讯,例如你能够你能够查询一切配对的蓝牙设备,并运用一个数组适配器将其打印显示出来:

SetpairedDevices =mBluetoothAdapter.getBondedDevices(); // If there are paired devices
if (pairedDevices.size() > 0) {
    //Loop through paired devices
    for (BluetoothDevice device : pairedDevices) {
        // Add the name and address to an array adapter to show in a ListView
        mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); }
}

树立一个蓝牙衔接只需求MAC地址就现已满足。

4. 扫描设备

扫描设备,只需求调用startDiscovery()办法,这个扫描的进程大约继续是12秒,应用程序为了ACTION_FOUND动作需求注册一个BroadcastReceiver来承受设备扫描到的信息。关于每一个设备,体系都会播送ACTION_FOUND动作。

// 用ACTION_FOUND为action注册播送接收器 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) {
        String action = intent.getAction(); // 发现设备 if (BluetoothDevice.ACTION_FOUND.equals(action)) { // 从Intent中获取蓝牙设备 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // 增加姓名和地址到设备适配器中 mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
}; //注册播送接收器 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); //在onDestroy时记住刊出播送接收器 

5. 使能被发现

假如你想使你的设备能够被别的设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent, int)办法就能够了。它将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时刻是120秒,当然你能够能够经过增加EXTRA_DISCOVERABLE_DURATION字段来改动使能时刻(最大不超越300秒)例如:

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent); 

运转该段代码今后,体系会弹出一个对话框来提示你发动设备使能被发现(此进程中假如你的蓝牙功用没有敞开,体系会帮你敞开),而且假如你预备对该远端设备发现一个衔接,你不需求敞开设备被发现功用,由于该功用仅仅在你的应用程序作为效劳器端的时分才需求。

6. 衔接设备

在应用程序中,想树立两个蓝牙设备之间的衔接,有必要完结客户端和效劳器端的代码(由于任何一个设备都有必要能够作为效劳端或许客户端)。一个敞开效劳来监听,一个建议衔接恳求(运用效劳器端设备的MAC地址)。当他们都具有一个蓝牙套接字在同一RFECOMM信道上的时分,能够以为他们之间现已衔接上了。效劳端和客户端经过不同的办法或别的们的蓝牙套接字。当一个衔接监听到的时分,效劳端获取到蓝牙套接字。当客户可翻开一个FRCOMM信道给效劳器端的时分,客户端获取到蓝牙套接字。 
注意:在此进程中,假如两个蓝牙设备还没有配对好的,android体系会经过一个通知或许对话框的方式来通知用户。RFCOMM衔接恳求会在用户挑选之前堵塞。

7. 效劳端的衔接

当你想要衔接两台设备时,一个有必要作为效劳端(经过持有一个翻开的BluetoothServerSocket),目的是监听外来衔接恳求,当监听到今后提供一个衔接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket今后就能够毁掉BluetoothServerSocket,除非你还想监听更多的衔接恳求。 
树立效劳套接字和监听衔接的根本进程: 
首要经过调用listenUsingRfcommWithServiceRecord(String, UUID)办法来获取BluetoothServerSocket目标,参数String代表了该效劳的称号,UUID代表了和客户端衔接的一个标识(128位格局的字符串ID,相当于PIN码),UUID有必要两边匹配才能够树立衔接。 
其次调用accept()办法来监听也许到来的衔接恳求,当监听到今后,回来一个衔接上的蓝牙套接字BluetoothSocket。 
最后,在监听到一个衔接今后,需求调用close()办法来封闭监听程序。(通常蓝牙设备之间是点对点的传输) 
注意:accept()办法不应该放在主Acitvity里面,由于它是一种堵塞调用(在没有监听到衔接恳求之前程序就一向停在那里)。解决办法是新建一个线程来办理。例如:

8. 客户端的衔接

为了初始化一个与远端设备的衔接,需求先获取代表该设备的一个BluetoothDevice目标。经过BluetoothDevice目标来获取BluetoothSocket并初始化衔接,详细进程: 
运用BluetoothDevice目标里的办法createRfcommSocketToServiceRecord(UUID)来获取BluetoothSocket。UUID即是匹配码。然后,调用connect()办法来。假如远端

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth
  • Android蓝牙技术Bluetooth初体验
  • Android蓝牙技术Bluetooth使用流程(详解)

相关文章

  • 2017-05-26hideSoftInputFromWindow,模拟按钮点击事件
  • 2017-05-26linux tcp GSO和TSO实现
  • 2017-05-26【腾讯Bugly干货分享】深入源码探索 ReactNative 通信机制,buglyreactnative
  • 2017-05-26Android Layout XML属性,androidlayout
  • 2017-05-26自定义一个全屏的AlertDialog。,全屏alertdialog
  • 2017-05-26移动应用支付系列一:支付宝支付,移动应用支付系列
  • 2017-05-26从视频中每X秒创建一个缩略图
  • 2017-05-269套Android实战经典项目资料分享给大家,9套android
  • 2017-05-26深入了解Kotlin的必备书籍,深入了解kotlin必备
  • 2017-05-26android实现文字渐变效果和歌词进度的效果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android View事件分发机制
    • 阿里巴巴开源Weex 开发教程,开源weex
    • Android自定义下拉刷新动画--仿百度外卖下拉刷新
    • Android实战技巧之四十八:Android上的Java8和kotlin
    • Android系统input设备的插拔和事件监听
    • 编译器开发系列--Ocelot语言2.变量引用的消解,编译器--ocelot
    • android 关于4.0之后不能直接获取SD卡外部存储路径的问题,androidsd
    • Android,androidstudio
    • 快递物流信息布局,快递物流信息
    • andriod 读取通讯录,andriod通讯录

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有