- 浏览: 332128 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xuanyuanxiaoxue:
...
Android - LayoutInflater -
柴兴博:
不错 多谢
Android 悬浮Activity并可拖动(访悬浮歌词) -
di1984HIT:
写的很好,我收藏一下。
java之动态代理模式(JDK和cglib) -
chinacssnj:
待测试,明天测,测试的结果发给大家
网络开发上传文件到服务器 -
fx_199182:
...
Android之MediaPlayer
首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" />
然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,只有8个类,而我们需要用到了就只有几个而已:
1.BluetoothAdapter 顾名思义,蓝牙适配器,直到我们建立bluetoothSocket连接之前,都要不断操作它
BluetoothAdapter中的动作常量
ACTION_DISCOVERY_FINISHED 已完成蓝牙搜索 ACTION_DISCOVERY_STARTED 已经开始搜索蓝牙设备 ACTION_LOCAL_NAME_CHANGED 更改蓝牙的名字 ACTION_REQUEST_DISCOVERABLE 请求能够被搜索 ACTION_REQUEST_ENABLE 请求启动蓝牙 ACTION_SCAN_MODE_CHANGED 扫描模式已经改变 ACTION_STATE_CHANGED 状态已改变
BluetoothAdapter里的方法很多,常用的有以下几个:
cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:
请求开启蓝牙
Intemtenabler=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(Intemtenabler,reCode);//同startActivity(enabler);
请求能够被搜索
Intemtenabler=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); startActivityForResult(Intemtenabler,reCode);//同startActivity(enabler);
getAddress()获取本地蓝牙地址
getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
getName()获取本地蓝牙名称
getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)
isDiscovering()判断当前是否正在查找设备,是返回true
isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false
listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回
BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
startDiscovery()开始搜索,这是搜索的第一步
BluetoothAdapter里的方法很多,常用的有以下几个:
cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:
2.BluetoothDevice看名字就知道,这个类描述了一个蓝牙设备
createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket
这个方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket
这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter
3.BluetoothServerSocket如果去除了Bluetooth相信大家一定再熟悉不过了,既然是Socket,方法就应该都差不多,这个类一种只有三个方法
两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!
还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接
close()这个就不用说了吧,翻译一下——关闭!
4.BluetoothSocket,跟BluetoothServerSocket相对,是客户端
一共5个方法,不出意外,都会用到
close(),关闭
connect()连接
getInptuStream()获取输入流
getOutputStream()获取输出流
getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备
5:搜索蓝牙设备
public class DiscoveryActivity extends ListActivity { private Handler _handler = new Handler(); /* 取得默认的蓝牙适配器 */ private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); /* 用来存储搜索到的蓝牙设备 */ private List<BluetoothDevice> _devices = new ArrayList<BluetoothDevice>(); /* 是否完成搜索 */ private volatile boolean _discoveryFinished; private Runnable _discoveryWorkder = new Runnable() { public void run() { /* 开始搜索 */ _bluetooth.startDiscovery(); for (;;) { if (_discoveryFinished) { break; } try { Thread.sleep(100); } catch (InterruptedException e){} } } }; /** * 接收器 * 当搜索蓝牙设备完成时调用 */ private BroadcastReceiver _foundReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { /* 从intent中取得搜索结果数据 */ BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); /* 将结果添加到列表中 */ _devices.add(device); /* 显示列表 */ showDevices(); } }; private BroadcastReceiver _discoveryReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { /* 卸载注册的接收器 */ unregisterReceiver(_foundReceiver); unregisterReceiver(this); _discoveryFinished = true; } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.discovery); /* 如果蓝牙适配器没有打开,则结果 */ if (!_bluetooth.isEnabled()) { finish(); return; } /* 注册接收器 */ IntentFilter discoveryFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(_discoveryReceiver, discoveryFilter); IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(_foundReceiver, foundFilter); /* 显示一个对话框,正在搜索蓝牙设备 */ SamplesUtils.indeterminate(DiscoveryActivity.this, _handler, "Scanning...", _discoveryWorkder, new OnDismissListener() { public void onDismiss(DialogInterface dialog) { for (; _bluetooth.isDiscovering();) { _bluetooth.cancelDiscovery(); } _discoveryFinished = true; } }, true); } /* 显示列表 */ protected void showDevices() { List<String> list = new ArrayList<String>(); for (int i = 0, size = _devices.size(); i < size; ++i) { StringBuilder b = new StringBuilder(); BluetoothDevice d = _devices.get(i); b.append(d.getAddress()); b.append('\n'); b.append(d.getName()); String s = b.toString(); list.add(s); } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); _handler.post(new Runnable() { public void run() { setListAdapter(adapter); } }); } protected void onListItemClick(ListView l, View v, int position, long id) { Intent result = new Intent(); result.putExtra(BluetoothDevice.EXTRA_DEVICE, _devices.get(position)); setResult(RESULT_OK, result); finish(); } }
发表评论
-
Android中AsyncTask的简单用法
2012-01-13 16:00 1168在开发Android移动客户端的时候往往要使用多线程来进行操 ... -
Android应用的自动升级、更新模块的实现 .
2011-11-16 14:01 679http://www.eoeandroid.com/threa ... -
一个APK反编译利器Apktool
2011-11-16 13:54 1590一个APK反编译利器Apktool APK 本地化 ... -
自定义Android标题栏TitleBar布局
2011-11-14 14:13 1260很多网友发现自己Android程序的标题栏TitleBar区域 ... -
Android GPS获取地理位置 .
2011-11-14 14:11 862import android.app.Activity; i ... -
android ListView详解
2011-11-14 13:48 1063在android开发中ListView是比较常用的组件,它以列 ... -
Android之Content provider 详解
2011-11-14 13:35 2480Android是如何实现应用程序之间数据共享的?一个应用程序可 ... -
Android源码地址
2011-11-12 19:14 1054http://blog.csdn.net/ilittleone ... -
android之File
2011-11-11 22:39 20111:Fileservice package cn.itcas ... -
Android知识补漏
2011-11-09 22:33 01:AndroidManifiest.xml < ... -
深入剖析Android消息机制
2011-11-09 14:13 969在Android中,线程内部或者线程之间进行信息交互时经常会使 ... -
Android之Handler详解(四)
2011-11-09 14:00 1292d、自己创建新的线程,然后在新线程中创建Looper,主线程调 ... -
Android之Handler详解(三)
2011-11-09 13:58 1370c、将消息队列绑定到子线程上,主线程只管通过Handl ... -
Android之Handler详解(二)
2011-11-09 13:54 1669二:sendMessage版本的Handl ... -
Android之Handler详解(一)
2011-11-09 13:22 2295一个Handler允许你发送和处理消息(Message)以及 ... -
关于StartActivityForResult方法的使用
2011-10-31 17:11 1108根据方法名可知 这个方法是要得到启动后的Activity返回的 ... -
Android 悬浮Activity并可拖动(访悬浮歌词)
2011-10-24 16:23 2110天天动听, 这款Android手机上的音乐播放器,相信不少朋友 ... -
Android GWES
2011-10-24 16:13 1204第八章 Android GWES 8.1 View Syst ... -
Android系统服务-WindowManager
2011-10-24 16:10 1452WindowManager是Android中一个重要的服务 ... -
http通信
2011-10-15 17:31 1103HTTP(HyperText Transfer Proto ...
相关推荐
理解 Android 蓝牙驱动开发是掌握 Android 蓝牙开发的关键。本文将从蓝牙基本概念、Android 蓝牙架构、蓝牙协议栈分析、HCI 层分析、蓝牙编程实现、蓝牙启动过程实现等六个方面对 Android 蓝牙驱动开发进行总结。 ...
总的来说,"android studio 蓝牙开发demo"涵盖了Android Bluetooth LE开发的基本流程,从设备搜索、连接、服务发现到数据交换,是学习和实践Android蓝牙编程的好素材。通过学习这个示例,开发者可以构建自己的蓝牙...
总之,Android蓝牙开发需要理解蓝牙API、设备连接、数据传输和权限管理等概念,而蓝牙连打印机则涉及到特定的打印机协议和指令集。通过实践和研究如PrinterDemo这样的示例,开发者可以更好地掌握这个过程。
蓝牙设备服务是 Android 蓝牙开发的核心组件之一,它提供了蓝牙设备的初始化、连接、数据传输和断开等功能。 五、应用程序:HSP、HFP、SDP 应用程序是 Android 蓝牙开发的最高层组件之一。HSP、HFP、SDP 等应用...
"Android 蓝牙驱动开发总结" Android 蓝牙驱动开发是一种复杂的技术领域, 涉及到蓝牙协议栈、HCI 层、L2CAP 层、SDP 层等多个层面。本文将对 Android 蓝牙驱动开发进行总结,包括底层到上层的蓝牙驱动开发,及其在...
在深入探讨“Android蓝牙耳机开发”这一主题时,我们首先需要理解的是,蓝牙技术在现代移动设备中的广泛应用,尤其是在音频传输领域,如蓝牙耳机的连接与控制。Android系统提供了丰富的API来支持蓝牙功能,使开发者...
以下是对"Android蓝牙开发(搜索,配对,连接,数据互传)"这个主题的详细解析。 首先,我们需要理解Android蓝牙的基础知识。Android系统支持蓝牙2.1以上的版本,包括经典蓝牙(Bluetooth Classic)和低功耗蓝牙...
首先,我们需要了解Android蓝牙开发的基础知识。Android系统从API Level 8(Android 2.2 Froyo)开始支持蓝牙API,包括低功耗蓝牙(Bluetooth Low Energy, BLE)从API Level 18(Android 4.3 Jelly Bean)开始引入。...
首先,我们需要理解蓝牙技术的基本概念,然后我们将详细讨论Android蓝牙开发客户端的实现步骤。 蓝牙是一种短距离无线通信技术,允许电子设备之间进行数据交换。在Android中,蓝牙功能主要通过`BluetoothAdapter`、...
我们将基于描述中的"Android蓝牙开发,读取数据"这个主题进行讨论。 首先,我们需要理解Android蓝牙开发的基本概念。Android提供了一个名为BluetoothAdapter的类,它是处理蓝牙操作的核心接口。通过这个类,我们...
通过分析这些代码,开发者可以更好地理解和学习Android蓝牙开发的基本流程和最佳实践。 通过以上讲解,你应该对Android蓝牙开发有了初步了解。实际开发时,还要注意不同Android版本间的兼容性问题和蓝牙设备的差异...
在Android平台上进行蓝牙开发是一项常见的任务,...总的来说,这个"android 蓝牙开发 sample demo"提供了全面的教程,让开发者能够快速上手Android蓝牙开发,理解蓝牙通信的基本流程,并为自己的项目打下坚实的基础。
在Android 8.1系统中进行蓝牙开发,你需要掌握一系列的关键技术点,这些技术涵盖了蓝牙的静默开启、蓝牙设备的曝光、扫描蓝牙设备、静默配对以及建立连接进行相互通信。以下是对这些知识点的详细解释: 1. **静默...
总的来说,这个Android应用通过集成蓝牙通信功能,实现了手机间的文件无线传输,展示了如何利用Android API与蓝牙设备交互。同时,也涵盖了权限请求、设备搜索、连接管理和数据通信等关键知识点。这样的应用在日常...
在Android平台上进行蓝牙开发,主要是利用Android提供的Bluetooth API来实现设备间的无线通信。这个过程涉及到多个关键步骤,包括蓝牙的开启、搜索、配对、连接以及数据传输等。以下是关于"基于Android的BlueTooth...
**Node.js-AndroidBLE蓝牙开发框架详解** 在移动设备开发中,蓝牙技术是实现设备间无线通信的关键技术之一。特别是低功耗蓝牙(Bluetooth Low Energy, BLE),在物联网(IoT)领域应用广泛,用于传感器数据传输、...
本文将深入探讨Android蓝牙HID协议开发的相关知识点,并提供实现手机连接蓝牙外设的基础步骤。 首先,理解蓝牙HID协议至关重要。蓝牙HID是Bluetooth SIG(蓝牙特别兴趣小组)定义的一种标准,主要用于无线连接输入...
在Android蓝牙通信中,需要注意的是,由于安全性考虑,必须请求`BLUETOOTH_ADMIN`和`BLUETOOTH`权限。此外,从Android 6.0(API级别23)开始,运行时权限也应被处理。 `BluetoothDemo`可能是一个示例项目,它包含了...