Android的联通性---Bluetooth(四)
来源:互联网 发布:智能网络电视哪个好 编辑:程序博客网 时间:2024/06/06 15:02
启用设备的可发现性
如果要让本地设备可以被其他设备发现,那么就要调用ACTION_REQUEST_DISCOVERABLE操作意图的startActivityForResult(Intent, int)方法。这个方法会向系统设置发出一个启用可发现模式的请求(不终止应用程序)。默认情况下,设备的可发现模式会持续120秒。通过给Intent对象添加EXTRA_DISCOVERABLE_DURATION附加字段,可以定义不同持续时间。应用程序能够设置的最大持续时间是3600秒,0意味着设备始终是可发现的。任何小于0或大于3600秒的值都会自动的被设为120秒。例如,以下代码把持续时间设置为300秒:
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
如图2所示,申请用户启用设备的可发现模式时,会显示这样一个对话框。如果响应“Yes”,那么设备的可发现模式会持续指定的时间,而且你的Activity会接收带有结果代码等于可发现设备持续时间的onActivityResult()回调方法的调用。如果用户响应“No”或有错误发生,则结果代码等于RESULT_CANCELED.
图2.启用可发现性对话框。
注意:如果设备没有开启蓝牙功能,那么开启设备的可发现模式会自动开启蓝牙。
在可发现模式下,设备会静静的把这种模式保持到指定的时长。如果你想要在可发现模式被改变时获得通知,那么你可以注册一个ACTION_SCAN_MODE_CHANGED类型的Intent广播。这个Intent对象中包含了EXTRA_SCAN_MODE和EXTRA_PREVIOUS_SCAN_MODE附加字段,它们会分别告诉你新旧扫描模式。它们每个可能的值是:SCAN_MODE_CONNECTABLE_DISCOVERABLE,SCAN_MODE_CONNECTABLE或SCAN_MODE_NONE,它们分别指明设备是在可发现模式下,还是在可发现模式下但依然可接收连接,或者是在可发现模式下并不能接收连接。
如果你要初始化跟远程设备的连接,你不需要启用设备的可现性。只有在你想要把你的应用程序作为服务端来接收输入连接时,才需要启用可发现性,因为远程设备在跟你的设备连接之前必须能够发现它。
连接设备
为了让两个设备上的两个应用程序之间建立连接,你必须同时实现服务端和客户端机制,因为一个设备必须打开服务端口,同时另一个设备必须初始化跟服务端设备的连接(使用服务端的MAC地址来初始化一个连接)。当服务端和客户端在相同的RFCOMM通道上有一个BluetoothSocket连接时,才能够被认为是服务端和客户端之间建立了连接。这时,每个设备能够获得输入和输出流,并且能够彼此开始传输数据。
服务端设备和客户端设备彼此获取所需的BluetoothSocket的方法是不同的。服务端会在接收输入连接的时候接收到一个BluetoothSocket对象。客户端会在打开跟服务端的RFCOMM通道时接收到一个BluetoothSocket对象。
一种实现技术是自动的准备一个设备作为服务端,以便在每个设备都会有一个服务套接字被打开,并监听连接请求。当另一个设备初始化一个跟服务端套接字的连接时,它就会变成一个客户端。另一种方法,一个设备是明确的”host”连接,并且根据要求打开一个服务套接字,而其他的设备只是简单的初始化连接。
注意:如果两个设备之前没有配对,那么Android框架会在连接过程期间,自动的显示一个配对请求通知或对话框给用户,如图3所示。因此在试图连接设备时,你的应用程序不需要关心设备是否被配对。FRCOMM的尝试性连接会一直阻塞,一直到用户成功的配对,或者是因用户拒绝配对或配对超时而失败。
图3.蓝牙配对对话框
- Android的联通性---Bluetooth(四)
- Android的联通性---Bluetooth(四)
- Android的联通性---Bluetooth(一)
- Android的联通性---Bluetooth(二)
- Android的联通性---Bluetooth(一)
- Android的联通性---Bluetooth(二)
- Android的联通性---Bluetooth(三)
- Android的联通性---Bluetooth(五)
- Android的联通性---Bluetooth(六)
- Android的联通性---Bluetooth(七)
- Android的联通性---Bluetooth(六)
- Android的联通性---Bluetooth(七)
- Android的联通性---Bluetooth(一)
- Android的联通性---Bluetooth(二)
- Android的联通性---Bluetooth(三)
- Android的联通性---Bluetooth(五)
- Android的联通性---Bluetooth(六)
- Android的联通性---Bluetooth(七)
- 如何使用Photoshop批量修改图片大小
- poj 2141
- PHP连接 SQL Server2005 失败,Fatal error: Call to undefined function mssql_connect() in
- .net
- HornetQ异步消息系统介绍
- Android的联通性---Bluetooth(四)
- wamp支持mssql
- hdu 1428 优先队列广搜+记忆化搜索
- PHP5.3.5如何连接MSSql Server2005
- IE8/9下,text-indent对css描绘三角形的影响
- hadoop的常用参数
- typedef数组类型
- [LeetCode] SUM4
- 格式化数字