Ⅰ 如何使用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回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。
代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。
BluetoothProfile.ServiceListener
当他们已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接口(即运行一个特定的配置文件,内部服务)。
蓝牙权限
为了在你的应用中使用蓝牙功能,至少要在AndroidManifest.xml中声明两个权限:BLUETOOTH(任何蓝牙相关API都要使用这个权限) 和 BLUETOOTH_ADMIN(设备搜索、蓝牙设置等)。
为了执行蓝牙通信,例如连接请求,接收连接和传送数据都必须有BLUETOOTH权限。
必须要求BLUETOOTH_ADMIN的权限来启动设备发现或操纵蓝牙设置。大多数应用程序都需要这个权限能力,发现当地的蓝牙设备。此权限授予其他的能力不应该使用,除非应用程序是一个“电源管理”,将根据用户要求修改的蓝牙设置
注释:要请求BLUETOOTH_ADMIN的话,必须要先有BLUETOOTH。
在你的应用manifest 文件中声明蓝牙权限。例如:
<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
...
</manifest>
通过查看<uses-permission>资料来声明应用权限获取更多的信息。
蓝牙设置
在你的应用通过蓝牙进行通信之前,你需要确认设备是否支持蓝牙,如果支持,确信它被打开。
如果不支持,则不能使用蓝牙功能。如果支持蓝牙,但不能够使用,你刚要在你的应用中请求使用蓝牙。这个要两步完成,使用BluetoothAdapter。
Ⅱ android蓝牙开发,注册一个广播接收者报空指针异常的错误。
你的context 这个是空对象,你看下你注册广播场景的上下文环境。使用对应的对象进行广播的注册。
Ⅲ android开发中如何增加蓝牙连接成功后弹出一个toast进行提示
用 handler
在activity里面声明一个 handler
1、如果蓝牙连接是一个类,把handler传入蓝牙的类
当蓝牙连接成功之后,Message mes = handler.obtainMessage();用mes发个消息。然后在activity里面的handler里面进行处理就可以了。
2.如果蓝牙连接在一个类里面。那就直接用
当蓝牙连接成功之后,Message mes = handler.obtainMessage();用mes发个消息。然后在activity里面的handler里面进行处理就可以了。
我一般都用service 处理蓝牙 以为要循环连接和搜索。也可以用广播。
Ⅳ 开发Android时,蓝牙耳机已经配对和连接上之后,无法再通过广播Action found搜索到它,是否可以再搜索到
具体有什么需求,连接成功了,不需要广播去获取了啊?直接从列表启动使用就行。
《》获取已配对的蓝牙设备(android.bluetooth.BluetoothDevice)
首次连接某蓝牙设备需要先配对,一旦配对成功,该设备的信息会被保存,以后连接时无需再配对,所以已配对的设备不一定是能连接的。
java">BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = adapter.getBondedDevices();
for(int i=0; i<devices.size(); i++)
{
BluetoothDevice device = (BluetoothDevice) devices.iterator().next();
System.out.println(device.getName());
}
Ⅳ 通过android代码如何实现手机蓝牙自动连接最后一次已配对的设备
先明确场景。你是希望如下哪种自动连接?
case1: 手机开机自动连接蓝牙最后配对设备:Android已经在Framework层实现。不需要Apk再做。关键代码如下:
.java 里面
onReceive 收到事件BluetoothAdapter.STATE_ON后
else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
initiateConnection();给状态机发CONNECT
.sendMessage(.CONNECT);
case2:蓝牙关闭状态,打开蓝牙,自动连接最后使用的设备:Apk层注册监听蓝牙打开的广播,然后在事件响应中获取已配对列表,取第一个去进行连接就好。
注册监听蓝牙打开的广播事件:android.bluetooth.adapter.action.STATE_CHANGED
Bluetooth ACTION_STATE_CHANGED curState = 11,preState = 10 打开中
Bluetooth ACTION_STATE_CHANGED curState = 12,preState = 11 打开了。
获取已配对设备列表:BluetoothAdapter.getBondedDevices()
取出第一个设备(也就是最新的),连接:
framework/base/core/java/android/bluetooth/
BluetoothHeadsetClient: connect(device)
BluetoothA2dpSink: connect(device)
Ⅵ 安卓广播 蓝牙 开发问题
你应该去论坛发求助帖!而不是来网络知道!
Ⅶ android的混合开发 JS页面能接收广播吗 在网页接收不到蓝牙按键的事件和广播
不是手机的问题,耳机的问题。
蓝牙耳机不止一种,我所知的一种是a2dp的一种不是a2dp的,a2dp的耳机就是可以听歌的,另外一种不能听歌
对于a2dp的耳机,如果短按一次hook键,系统会当作一个keyevent来处理,走的是发送广播的流程。如果短按多次,或者长按一次hook 键,不会有keyevent,会当作一个类似与“BVRA”的AP命令来处理,处理过程可以参考源码的BluetoothHandsfree.java, 这个时候就收不到广播。
而对于不是a2dp的耳机,无论怎样按按键,都是发送ap命令,不会收到keyevent。
解决方法有两个,一是换个耳机,二是改rom,在蓝牙bsp那部分,无论什么耳机都走keyevent的流程