- 浏览: 324097 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 1116在开发Android移动客户端的时候往往要使用多线程来进行操 ... -
Android应用的自动升级、更新模块的实现 .
2011-11-16 14:01 639http://www.eoeandroid.com/threa ... -
一个APK反编译利器Apktool
2011-11-16 13:54 1546一个APK反编译利器Apktool APK 本地化 ... -
自定义Android标题栏TitleBar布局
2011-11-14 14:13 1211很多网友发现自己Android程序的标题栏TitleBar区域 ... -
Android GPS获取地理位置 .
2011-11-14 14:11 820import android.app.Activity; i ... -
android ListView详解
2011-11-14 13:48 1020在android开发中ListView是比较常用的组件,它以列 ... -
Android之Content provider 详解
2011-11-14 13:35 2430Android是如何实现应用程序之间数据共享的?一个应用程序可 ... -
Android源码地址
2011-11-12 19:14 1018http://blog.csdn.net/ilittleone ... -
android之File
2011-11-11 22:39 19631:Fileservice package cn.itcas ... -
Android知识补漏
2011-11-09 22:33 01:AndroidManifiest.xml < ... -
深入剖析Android消息机制
2011-11-09 14:13 930在Android中,线程内部或者线程之间进行信息交互时经常会使 ... -
Android之Handler详解(四)
2011-11-09 14:00 1257d、自己创建新的线程,然后在新线程中创建Looper,主线程调 ... -
Android之Handler详解(三)
2011-11-09 13:58 1343c、将消息队列绑定到子线程上,主线程只管通过Handl ... -
Android之Handler详解(二)
2011-11-09 13:54 1625二:sendMessage版本的Handl ... -
Android之Handler详解(一)
2011-11-09 13:22 2259一个Handler允许你发送和处理消息(Message)以及 ... -
关于StartActivityForResult方法的使用
2011-10-31 17:11 1045根据方法名可知 这个方法是要得到启动后的Activity返回的 ... -
Android 悬浮Activity并可拖动(访悬浮歌词)
2011-10-24 16:23 2036天天动听, 这款Android手机上的音乐播放器,相信不少朋友 ... -
Android GWES
2011-10-24 16:13 1145第八章 Android GWES 8.1 View Syst ... -
Android系统服务-WindowManager
2011-10-24 16:10 1411WindowManager是Android中一个重要的服务 ... -
http通信
2011-10-15 17:31 1064HTTP(HyperText Transfer Proto ...
相关推荐
android 蓝牙 耳机 开发
Android蓝牙开发必备,是初学者,初级工程师学习Android 蓝牙的必备手册。 主要分为三部分 1.打开蓝牙; 2.查找附近已配对或可用的设备; 3.连接设备; 4.设备间数据 交换。
我的博客“Android 蓝牙开发,蓝牙连打印机”有环境可运行截图。希望对大家有帮助,放心用吧。
Android之蓝牙驱动开发总结,包括底层到上层以及个各协议层的封装与总结,以及android蓝牙应用程序的开发。
android蓝牙开发步骤.pdf
android studio 蓝牙开发demo
Android蓝牙开发客户端代码,必须配合服务器端进行操作,
Android蓝牙串口开发指南
基于Android的BlueTooth开发手机蓝牙和蓝牙模块通讯,
Android 蓝牙BLE全面解析以及智能车锁开发实例一、蓝牙BLE产生背景——蓝牙的发展历程 二、蓝牙BLE的基本概念 三、蓝牙BLE的架构介绍 1. 蓝牙BLE架构概览 2. 简述BLE如何发送数据包 2.1 广播方式 2.2 连接方式 四、...
3.2 Android 与蓝牙协议栈的Bluetooth 之HCI层分析 .4.1HCI层与基带的通信方 4.2包的分析及研究 4.3通信过程的研究与分析 五Bluetooth之编程实现 5.1 HCI昙编程 5.2 L2CAP层编程 5.3 SDP层编程 六Bluetooth 之启动...
Android BLE 蓝牙开发框架,使用回调方式处理,搜索、连接、notify、indicate、读、写等一系列蓝牙操作
android开发蓝牙demo
Android蓝牙开发源代码,连接蓝牙打印机,打印标签、条码等。 Android 蓝牙打印机(ESC/POS 热敏打印机),打印小票和图片,对蓝牙配对和连接打印功能进行了封装,让你超快实现蓝牙打印功能。
完整实现了android的蓝牙通讯开发,可以双方进行msg通讯,方便再开发学习。
Android蓝牙开发
android蓝牙串口开发 android连接蓝牙 先驱者蓝牙小车android控制端 安卓连接蓝牙串口模块控制蓝牙下车的demo 之前做这个东西的时候在网上找了好久没找到,只在淘宝里发现了 还要收10元,无售后,我能忍么?! 一咬...
最近公司开发需要用到蓝牙,花了大约一天的时间总结整理了一下。主要是为了以后自己方便看。有需要的朋友可以看下。欢迎一起讨论。后面会带上博客。里面是实现了蓝牙搜索,配对,连接,数据互传。
android蓝牙开发简介.pdf