




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Bluetooth蓝牙 提供的包android.bluetooth。蓝牙功能包:BluetoothAdapter 蓝牙适配器(代表本地蓝牙适配器)BluetoothClass 蓝牙类(主要包括服务和设备)BluetoothClass.Device 蓝牙设备类BluetoothClass.Device.Major 蓝牙设备管理BluetoothClass.Service 有关蓝牙服务的类BluetoothDevice 蓝牙设备(主要指远程蓝牙设备)BluetoothServerSocket 监听蓝牙连接的类BluetoothSocket 蓝牙连接类首先设置权限:其次,要使用蓝牙,首先需要获得蓝牙适配器,BluetoothAdapter _bluetooth=BluetoothAdapter.getDefaultAdapter();/获得本地蓝牙适配器如果要获得远程的蓝牙适配器需要使用BluetoothDevice类。先定义两个常量private static final int REQUEST_ENABLE = 0x1;private static final int REQUEST_DISCOVERABLE = 0x2;1,请求打开蓝牙:Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enabler,REQUEST_ENABLE);2,请求能够被搜索Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);startActivityForResult(enabler,REQUEST_DISCOVERABLE);BluetoothAdapter中的动作常量还有:ACTION_DISCOVERY_FINISHED 已完成蓝牙搜索ACTION_DISCOVERY_STARTED 已经开始搜索蓝牙设备ACTION_LOCAL_NAME_CHANGED 更改蓝牙的名字ACTION_REQUEST_DISCOVERABLE 请求能够被搜索ACTION_REQUEST_ENABLE 请求启动蓝牙ACTION_SCAN_MODE_CHANGED 扫描模式已改变ACTION_STATE_CHANGED 状态已改变3,打开蓝牙_bluetooth.enable();4,关闭蓝牙_bluetooth.disable();BluetoothAdapter中的常用方法:cancelDiscovery 取消当前设备搜索的过程checkBluetoothAddress 检查蓝牙地址是否正确 如00:43:A8:23:10:F0 字母字符必须是大写才有效disable 关闭蓝牙适配器enable 打开蓝牙适配器getAddress 取得本地蓝牙设备的适配器地址getDefaultAdapter 得到默认的蓝牙适配器getName 得到蓝牙的名字getRemoteDevice 取得指定蓝牙地址的BluetoothDevice对象getScanMode 取得扫描模式getState 得到状态isDiscovering 是否允许被搜索isEnabled 是否打开setName 设置名字startDiscovery 开始搜索5,搜索蓝牙设备BluetoothDevice实际上是一个蓝牙硬件地址薄,该类对象是不可改变的。其操作都是远程蓝牙硬件使用BluetoothAdapter来创建一个BluetoothDevice对象。代码清单8-22 public class DiscoveryActivity extends ListActivity private Handler _handler=new Handler(); /取得默认的蓝牙适配器 private BluetoothAdapter _bluetooth=BluetoothAdapter.getDefaultAdapter(); /用来存储搜索到的蓝牙设备 private ListBluetoothDevice) _devices=new ArrayList(); /是否完成搜索 private volatile boolean _discoveryFinished; private Runnable _discoveryWorker=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) BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); _devices.add(device); showDevices(); ; private BroadcastReceiver _discoveryReceiver=new BroadcastReceiver() public void onReceive(Context context,Intent intent) unregisterReceiver(_foundReceiver); unregisterReceiver(this); _discoveryFinished=true; ; protected void onCreate(Bundle saveInstance) super.onCreate(.); getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.discovery)l /如果蓝牙适配器没有打开 则结束 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 showDevice() List list=new ArrayList(); for (int i=0,size=_devices.size();isize;+i) StringBuilder sb=new StringBuilder(); BluetoothDevice d=_devices.get(i); sb.append(d.getAddress(); sb.append(n); sb.append(d.getName(); String s=sb.toString(); list.add(s); final ArrayAdapter adapter=new ArrayAdapter(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 pos,long id) Intent result=new Intent(); result.putExtra(BluetoothDevice.EXTRA_DEVICE,_devices.get(pos); setResult(RESULT_OK,result); finish(); 6,Socket服务端与客户端注册蓝牙服务器: private BluetoothAdapter _bluetooth=BluetoothAdapter.getDefaultAdapter(); private BluetoothServerSocket _serverSocket=bluetooth.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,UUID.fromString(a60f35f0-b93a-11de-8a39-08002009c666);注 意listenUsingRfcommWithServiceRecord方法返回一个蓝牙服务器对象,其参数 PROTOCOL_SCHEME_RFCOMM是一个String类型的自定义常量,代表蓝牙服务器的名称,而 UUID.fromString(a60f35f0-b93a-11de-8a39-08002009c666)是该蓝牙服务器的唯一标识UUID。 在客户端连接服务器时需要使用这个UUID。接收请求:BluetoothSocket socket=_serverSocket.accept();if (socket!=null) ._serverSocket.close();/关闭蓝牙服务器代码清单8-23 public static final String PROTOCOL_SCHEME_L2CAP=bt12cap; /btspp btgoep tcpobex private Thread _serverWorker=new Thread() public void run() listen(); ;onCreate _serverWorker.start();onDestroy shutdownServer();finalize() throws Throwable shutdownServer();private void shutdownServer() new Thread() public void run() _serverWerrupt(); if (_serverSocket!=null) try _serverSocket.close(); catch (IOException e) Log.e(TAG,e); _serverSocket=null; .start();protected void listen() try _serverSocket=bluetooth.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM,UUID.fromString(a60f35f0-b93a-11de-8a39-08002009c666); final List lines=new ArrayList(); _handler.post(new Runnable() public void run() lines.add(server started.); ArrayAdapter adapter=new ArrayAdapter(ServerSocketActivity.this,android.R.layout.simple_list_item_1,lines); setListAdapter(adapter); ); BluetoothSocket socket=_serverSocket.accept(); if (socket!=null) InputStream is=socket.getInputStream(); int read=-1; final byte bytes=new byte2048; for (;(read=is.read(bytes)-1;) final int count=read; _handler.post(new Runnable() public void run() StringBuilder b=new StringBuilder(); for (int i=0;i0) b.append( ); String s=Integer.toHexString(bytesi & 0xFF); if (s.length()2) b.append(0); b.append(s); String s=b.toString(); lines.add(s); ArrayAdapter adapter=new ArrayAdapter(ServerSocketActivity.this,android.R.layout.simple_list_item_1,lines); setListAdapter(adapter); ); catch (IOException e) Log.e(TAG,e); finally 客户端的连接代码:代码清单8-24 public class ClientSocketActivity extends Activity private static final String TAG=ClientSocketActivity.class.getSimpleName(); private static final int REQUEST_DISCOVERY=0x1; private Handler _handler=new Handler(); private BluetoothAdapter _bluetooth=BluetoothAdapter.getDefaultAdapter(); provate void onCreate(.) super. getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.client_socket); if (!_bluetooth.isEnabled() finish(); return ; Intent intent=new Intent(this,DiscoveryActivity.class); /提示选择一个要连接的服务器 Toast.makeText(this,select device to connect,Toast.LENGTH_SHORT).show(); startActivityForResult(intent,REQUEST_DISCOVERY); /选择了服务器之后进行连接 protec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具厂生产计划调整规章
- 公益信托合同(标准版)
- 小学语文教研组线上线下教学资源整合计划
- 沿海防潮工程试验检测计划
- 医院科室护理质量提升计划
- 小班下学期环保教育计划
- 2024-2025学年牛津译林英语七年级下册教学质量提升计划
- 农场季节性劳动力安排计划
- 土石方现场环境保护措施
- 钢结构工程施工管理质量通病防治措施
- 2025 - 2026学年教科版科学三年级上册教学计划
- 23G409先张法预应力混凝土管桩
- 人文地理学(王恩涌)
- 期权开户考试考点及试题
- 公路施工环境污染应急预案
- GB/T 31227-2014原子力显微镜测量溅射薄膜表面粗糙度的方法
- 三年级下册口算天天100题(A4打印版)
- 上海交通大学学生生存手册
- 幼儿园绘本故事:《苏丹的犀角》 课件
- 03第三阶段04印章模型制作
- GB∕T 17766-2020 固体矿产资源储量分类
评论
0/150
提交评论