Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx

上传人:b****5 文档编号:20357502 上传时间:2023-01-22 格式:DOCX 页数:12 大小:167.67KB
下载 相关 举报
Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx_第1页
第1页 / 共12页
Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx_第2页
第2页 / 共12页
Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx_第3页
第3页 / 共12页
Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx_第4页
第4页 / 共12页
Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx

《Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

Android BLE与终端通信二Android Bluetooth基础搜索蓝牙设备显示列表Word文档下载推荐.docx

一个具备蓝牙通讯功能的设备,可以在两个角色间切换,平时工作在从模式,等待其它主设备来连接,需要时,转换为主模式,向其它设备发起呼叫。

一个蓝牙设备以主模式发起呼叫时,需要知道对方的蓝牙地址,配对密码等信息,配对完成后,可直接发起呼叫。

2.蓝牙的呼叫过程

蓝牙主端设备发起呼叫,首先是查找,找出周围处于可被查找的蓝牙设备。

主端设备找到从端蓝牙设备后,与从端蓝牙设备进行配对,此时需要输入从端设备的PIN码,也有设备不需要输入PIN码。

配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主端即可向从端设备发起呼叫,已配对的设备在下次呼叫时,不再需要重新配对。

已配对的设备,做为从端的蓝牙耳机也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。

链路建立成功后,主从两端之间即可进行双向的数据或语音通讯。

在通信状态下,主端和从端设备都可以发起断链,断开蓝牙链路。

3.蓝牙一对一的串口数据传输应用

蓝牙数据传输应用中,一对一串口数据通讯是最常见的应用之一,蓝牙设备在出厂前即提前设好两个蓝牙设备之间的配对信息,主端预存有从端设备的PIN码、地址等,两端设备加电即自动建链,透明串口传输,无需外围电路干预。

一对一应用中从端设备可以设为两种类型,一是静默状态,即只能与指定的主端通信,不被别的蓝牙设备查找;

二是开发状态,既可被指定主端查找,也可以被别的蓝牙设备查找建链。

三.蓝牙Android编程应用

1.相关部署

AndroidBLE与终端通信

(一)——AndroidBluetooth基础API以及简单使用获取本地蓝牙名称地址

下面依然会被提及

2.UUID

1.1认识一下UUIDUUID含义是通用唯一识别码(UniversallyUniqueIdentifier),这是一个软件建构的标准,也是被开源软件基金会(OpenSoftwareFoundation,OSF)的组织应用在分布式计算环境(DistributedComputingEnvironment,DCE)领域的一部分。

在蓝牙3.0及一下版本中,UUID被用于唯一标识一个服务,比如文件传输服务,串口服务、打印机服务等,如下:

蓝牙串口服务

SerialPortServiceClass_UUID=‘{00001101-0000-1000-8000-00805F9B34FB}’

LANAccessUsingPPPServiceClass_UUID=‘{00001102-0000-1000-8000-00805F9B34FB}’

拨号网络服务

DialupNetworkingServiceClass_UUID=‘{00001103-0000-1000-8000-00805F9B34FB}’

信息同步服务

IrMCSyncServiceClass_UUID=‘{00001104-0000-1000-8000-00805F9B34FB}’SDP_OBEXObjectPushServiceClass_UUID=‘{00001105-0000-1000-8000-00805F9B34FB}’

文件传输服务

OBEXFileTransferServiceClass_UUID=‘{00001106-0000-1000-8000-00805F9B34FB}’IrMCSyncCommandServiceClass_UUID=‘{00001107-0000-1000-8000-00805F9B34FB}’

蓝牙的连接有主从设备,提供服务的可以认为是从设备。

主设备通过UUID访问从设备提供具有相同UUID的服务,从而建立客服端—服务器(C/S)模式。

四.实际应用

我们新建一个Eclipse工程:

BluetoothGet

1.蓝牙协议

我们直接看图(简单的概念)

2.蓝牙权限

<

uses-permissionandroid:

name="

android.permission.BLUETOOTH"

/>

android.permission.BLUETOOTH_ADMIN"

3.编写程序

activity_main.xml

布局很简单,就一个搜索按钮和一个textview的列表

LinearLayoutxmlns:

android="

xmlns:

tools="

android:

layout_width="

match_parent"

layout_height="

orientation="

vertical"

>

<

Button

id="

@+id/btnSearch"

wrap_content"

text="

搜索蓝牙设备"

/>

TextView

@+id/tvDevices"

/LinearLayout>

步骤分析

1.首先获取本地的蓝牙适配器

//获取本地蓝牙适配器

mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();

2.判断手机是否支持蓝牙

//判断手机是否支持蓝牙

if(mBluetoothAdapter==null){

Toast.makeText(this,"

设备不支持蓝牙"

Toast.LENGTH_SHORT).show();

finish();

}

3.判断蓝牙是否打开

//判断是否打开蓝牙

if(!

mBluetoothAdapter.isEnabled()){

//弹出对话框提示用户是后打开

Intentintent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(intent,1);

//不做提示,强行打开

//mBluetoothAdapter.enable();

4.获取已经配对的设备

//获取已经配对的设备

Set<

BluetoothDevice>

pairedDevices=mBluetoothAdapter.getBondedDevices();

//判断是否有配对过的设备

if(pairedDevices.size()>

0){

for(BluetoothDevicedevice:

pairedDevices){

//遍历到列表中

tvDevices.append(device.getName()+"

:

"

+device.getAddress());

Log.i("

已配对设备"

tvDevices.getText().toString());

5.搜索的点击事件

@Override

publicvoidonClick(Viewv){

switch(v.getId()){

caseR.id.btnSearch:

//设置进度条

setProgressBarIndeterminateVisibility(true);

setTitle("

正在搜索..."

);

//判断是否在搜索,如果在搜索,就取消搜索

if(mBluetoothAdapter.isDiscovering()){

mBluetoothAdapter.cancelDiscovery();

//开始搜索

mBluetoothAdapter.startDiscovery();

break;

6.搜索的广播

1.注册广播

/**

*异步搜索蓝牙设备——广播接收

*/

//找到设备的广播

IntentFilterfilter=newIntentFilter(BluetoothDevice.ACTION_FOUND);

//注册广播

registerReceiver(receiver,filter);

//搜索完成的广播

filter=newIntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

1.广播接收器

//广播接收器

privatefinalBroadcastReceiverreceiver=newBroadcastReceiver(){

@Override

publicvoidonReceive(Contextcontext,Intentintent){

//收到的广播类型

Stringaction=intent.getAction();

//发现设备的广播

if(BluetoothDevice.ACTION_FOUND.equals(action)){

//从intent中获取设备

BluetoothDevicedevice=intent

.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

//判断是否配对过

if(device.getBondState()!

=BluetoothDevice.BOND_BONDED){

//添加到列表

+device.getAddress()+"

\n"

//搜索完成

}elseif(BluetoothAdapter.ACTION_DISCOVERY_FINISHED

.equals(action)){

//关闭进度条

搜索完成!

};

好了,到此,我们的程序算是完成了

MainActivity

packagecom.lgl.bluetoothget;

importjava.util.Set;

importandroid.app.Activity;

importandroid.bluetooth.BluetoothAdapter;

importandroid.bluetooth.BluetoothDevice;

importandroid.content.BroadcastReceiver;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.IntentFilter;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.TextView;

importandroid.widget.Toast;

publicclassMainActivityextendsActivityimplementsOnClickListener{

//本地蓝牙适配器

privateBluetoothAdaptermBluetoothAdapter;

//搜索到蓝牙添加

privateTextViewtvDevices;

//搜索蓝牙的按钮

privateButtonbtnSearch;

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

privatevoidinitView(){

tvDevices=(TextView)findViewById(R.id.tvDevices);

btnSearch=(Button)findViewById(R.id.btnSearch);

btnSearch.setOnCListener(this);

//获取本地蓝牙适配器

mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();

//判断手机是否支持蓝牙

//判断是否打开蓝牙

//获取已经配对的设备

pairedDevices=mBluetoothAdapter

.getBondedDevices();

//设置进度条

//广播接收器

//关闭进度条

}

我们运行一下

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1