关闭

基于SnapDragonBoard410c的蓝牙控制

标签: android高通
131人阅读 评论(0) 收藏 举报
分类:

在你的应用程序能够使用蓝牙进行通信之前,你需要进行确认蓝牙设备是否被当前设备所支持。如果当前设备支持蓝牙,则需要请求开启蓝牙设备。该部分可使用BluetoothAdapter通过两步完成。

(1)BluetoothAdapter对于任何的蓝牙行为都是必备的。获取BluetoothAdapter,可通过调用静态方法getDefaultAdater()。该方法返回一个BluetoothAdapter对象,用来代表自己设备的蓝牙适配器。如果getDefaultAdapter()返回null,那么该设备并不支持蓝牙.

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

(2)接下来,你需要确保蓝牙处于开启的状态。调用isEnabled()方法来检查蓝牙目前是否可用。如果该方法返回false,那么蓝牙处于不可用的状态。为了请求蓝牙设备的开启,使用ACTION_REQUEST_ENABLE的Intent,并调用startActivityForResult()方法。这将会通过系统设置开启你的蓝牙,例如:

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

调用该方法后,一个请求开启蓝牙的对话框将会出现在屏幕上。如果用户点击确认,那么系统将会开启蓝牙设备,该过程完成(或失败)后,将会回到你的应用程序。

使用BluetoothAdapter,通过搜索设备或查询配对设备列表可以找到远程蓝牙设备。

设备搜索(Device Discovery)是一个扫描的过程,用来搜索本地开启蓝牙的设备,在此之后请求每一个扫描到设备的信息。然而,一个蓝牙设备只有处于可见状态下才会返回设备信息,例如设备名称,MAC地址等。使用该信息,设备能够实例化和该设备的蓝牙连接。

当第一次和远程蓝牙设备进行连接时,一个配对的请求将会自动呈现在用户面前。当设备配对时,设备的基础信息将会被保存并能够使用蓝牙的API进行读取。使用远程蓝牙设备的MAC地址,介于蓝牙设备间的连接将能够在任意时刻实例化,而不需要进行搜索操作(假定设备在蓝牙的通信范围内)

(3)查询配对设备

在搜索设备之前,有必要查询已配对的设备集,来得知想要连接的设备是否已经配对。为了执行上述操作,可以调用getBondedDevices()方法。该方法返回一个BluetoothDevice的集合来代表配对设备。例如,你可以查询所有的配对设备并使用ArrarAdapter显示它们:

Set<BluetoothDevice> pairedDevices = 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());
    }
}

需要使用BluetoothDevice进行连接实例化的唯一值是MAC地址。在上述的例子中,该部分作为ArrayAdapter的一部分呈现给用户。关于如何使用MAC地址实例化连接,请参考后文。

(4)发现设备

执行发现设备的操作,仅仅需要执行startDiscovery()方法。该过程是异步的,该方法将会立刻返回一个布尔值表明搜索是否已经开始。通常情况下,该搜索的过程调用12秒钟的查询,随后返回找到的设备。

你的应用程序必须使用ACTION_FOUNDd的Intent注册一个BroadastReceiver。该Intent用来接受每一个查找到设备的信息。对于每一个设备,系统将会广播ACTION_FOUND。该Intent包含两个额外域,EXTRA_DEVICE 和 EXTRA_CLASS。分别包含一个BluetoothDevice类对象和BluetoothClass类对象。例如:

// Create a BroadcastReceiver for ACTION_FOUND
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
};
// Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

执行设备搜索的操作是一项很繁重的任务,会消耗大量的资源。一旦你找到了一个设备并要进行连接,请务必确认是否停止搜索设备的操作。如果已经进行了连接,那么搜索操作将会显著地降低连接的速率,因此你应当在连接时停止搜索。可通过cancelDiscovery()方法停止搜索。

0
0
查看评论

基于51单片机和蓝牙控制的红外小车

整理资料,翻到大一时候做的一个比赛,要求做一个电子小车,没有很多具体要求,算是比较开放一点的题目,虽然这个算不上厉害,但在那段期间感觉真的学到了很多,总结了一下,就是永远不要停下学习的脚步。
  • headwind_
  • headwind_
  • 2016-12-21 10:10
  • 1210

android蓝牙控制继电器——手机客户端的实现

通过手机自身所带的蓝牙实现连接蓝牙模块,从而实现通过单片机控制继电器,实现弱点控制强电(这里只做掩饰的小Demo)。
  • u013470102
  • u013470102
  • 2014-11-04 16:11
  • 5791

单片机+手机APP蓝牙控制RGB灯的颜色变化 程序与pcb

http://www.51hei.com/bbs/dpj-42269-1.html STC15单片机 模块化程序 关于RGB灯的设计,自己写了一个手机APP通过蓝牙控制RGB灯的颜色变化   pcb下载 电路图:  PCB.rar&...
  • mengzhengjie
  • mengzhengjie
  • 2016-12-05 09:05
  • 1760

基于STM32的安卓蓝牙多功能遥控车

基于STM32的安卓蓝牙多功能遥控车 为了学以致用,本人就打算用STM32和安卓蓝牙上位机做一款多功能遥控小车,检验一下自己的学习成果。顺便送给小盆友当玩具,也非常不错哈,纯手工DIY,网上可是买不到的。 先在网上搜索了很多资料,本想着“抄袭”一个算了,无奈网上仅存的成品不是功能简单,就是遥控器...
  • WXLmjr
  • WXLmjr
  • 2014-06-28 15:33
  • 3293

手机与单片机通过蓝牙通信----手机控制灯

环境   1、普中科技HC6800-EM3 v2.2 单片机开发实验仪(芯片STC90C516RD+)           2、无线蓝牙串口透传模块 HC-06从机  &...
  • itas109
  • itas109
  • 2013-05-18 16:54
  • 6970

基于SnapDragonBoard410c的单例设计模式

单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。下面针对一些例子分析一下我们在开发过程中应用单例模式需要注意的点。单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1. 应用中某个实例对象需要频繁的被访问。 ...
  • u013763766
  • u013763766
  • 2018-02-07 09:58
  • 28

基于SnapDragonBoard410C的手势识别

目前在物联网的领域里有许多的交互手段,例如语音交互,手势交互,手柄交互。今天我们就来了解下啥是手势交互!措辞有点糙,请大家见谅。First:we should download a SDK package from internet.it’s called Touch3D 接下来主要是是向大家介绍...
  • u013763766
  • u013763766
  • 2017-12-26 14:58
  • 247

基于arduino和蓝牙通信的智能窗户控制系统

最近因为要做实训,智能窗户,所以就写了一个蓝牙通信的APP来控制。所以也不是很深入的了解使用,只是那别人的改改。1、需要在AndroidManifest.xml中加入一下权限<uses-permission android:name="android.permission.BLUET...
  • qq_35638837
  • qq_35638837
  • 2017-07-04 23:00
  • 247

基于蓝牙BLE的室内定位技术研究与实现

今日开贴,希望项目顺利,希望越走越远。。。 2016年5月31日
  • hanma602
  • hanma602
  • 2016-05-31 09:20
  • 532

<转载>Android 通过蓝牙控制小车源代码+视频

《转载自http://hi.baidu.com/liuhuiviking/blog/item/503f2e1feb0e00e3e1fe0b74.html》 上次成功实现了通过笔记本电脑蓝牙来控制智能小车机器人的运动,但是通过电脑控制毕竟不方便,于是乎~本人打算将控制程序移植
  • caryee89
  • caryee89
  • 2011-10-14 20:30
  • 16379
    个人资料
    • 访问:4816次
    • 积分:303
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类