,,Android实现蓝牙串口通讯

,,Android实现蓝牙串口通讯

这篇文章主要为大家详细介绍了机器人实现蓝牙串口通讯,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了机器人实现蓝牙串口通讯的具体代码,供大家参考,具体内容如下

最近在弄蓝牙串口,参考了不少网上的大佬,加上自己早期对C#的学习,写一个给自己的备忘录,如果有大佬看到还请多多指教。

1.简介

机器人设备中提供了一整套蓝牙的API,我这边只取了其中需要的部分。

初期权限

uses-permission Android:name=' Android。许可。蓝牙'/

uses-permission Android:name=' Android。许可。蓝牙_管理'/

1.BluetoothAdapter

蓝牙适配器是本地蓝牙适配器的对象,是所有蓝牙交互操作的入口。

导入安卓。蓝牙。蓝牙适配器;

导入安卓。蓝牙。蓝牙设备;

私有蓝牙适配器mBluetoothAdapter=null

public ArrayList蓝牙设备设备列表=new ArrayList蓝牙设备();

//初始化蓝牙

私有void BlueInit()

{

//获取蓝牙适配器

mBluetoothAdapter=蓝牙适配器。getdefaultadapter();

//请求开启蓝牙

如果(!mBluetoothAdapter.isEnabled())

{

Intent enableBtIntent=新意图(蓝牙适配器.ACTION _ REQUEST _ ENABLE);

((活动)_上下文)。startActivityForResult(enableBtIntent,1);

}

}

这里我只获取了已经匹配好的蓝牙模块,安卓本身自带搜索匹配蓝牙设备功能。太麻烦了,还有匹配,还要输个人识别码码。

直接搜索已经匹配的蓝牙模块。

2.BluetoothDevice

表示远程的蓝牙设备可进行远程蓝牙设备的连接请求,以及查询该蓝牙设备的信息,例如名称,地址等。

简历上受保护的void()

{

//将已配对的设备添加到列表中

setbluetooth设备配对设备=mbluetoothadapter。getbondedevices();

设备列表。clear();

if (pairedDevices.size() 0)

{

String[]name list=new String[配对的设备。size()];

int I=0;

用于(蓝牙设备设备:成对设备)

{

deviceList.add(设备);

名称列表[I]=设备。getname()' \ n '设备。get address();

我;

}

//创建一个ArrayAdapter

ArrayAdapter?adapter=new ArrayAdapterObject((Activity)_ context,android .r .布局simple _ expandable _ list _ item _ 1,名称列表);

DeviceView.setAdapter(适配器);

//注册一个元素单击事件监听方法

设备视图。setonitemclicklistener(新设备click());

}

}

然后直接返回给主窗体

//事件按钮触发

公共类设备点击实现适配器视图.OnItemClickListener

{

@覆盖

public void onItemClick(适配器视图?arg0,View view,int position,long id)

{

onconfirm侦听器。确认(设备列表。get(位置));

}

}

OnConfirmListener上的公共接口

{

公共空的确认(蓝牙设备装置);

}

这里其实用了一个活动的作为一个对话。

相对布局xmlns:Android=' http://模式。安卓。' com/apk/RES/Android '

xmlns:tools=' http://模式。安卓。' com/tools '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

Android:padding bottom=' @ dimen/activity _ vertical _ margin '

Android:padding left=' @ dimen/activity _ horizontal _ margin '

Android:padding right=' @ dimen/activity _ horizontal _ margin '

Android:padding top=' @ dimen/activity _ vertical _ margin '

工具:context=' bluetoothtoserial'。设备活动'

列表视图

android:id='@ id/DeviceView '

Android:layout _ width=' match _ parent '

Android:layout _ height=' match _ parent '

Android:layout _ alignParentLeft=' true '

Android:layout _ alignParentTop=' true '

/列表视图

/RelativeLayout

也是方便后面调用

包装蓝牙材料;

导入Java。util。ArrayList

导入Java。util。设置;

导入安卓。app。活动;

导入安卓。app。对话;

导入安卓。蓝牙。蓝牙适配器;

导入安卓。蓝牙。蓝牙设备;

导入安卓。内容。语境;

导入安卓。内容。意图;

导入安卓。OS。捆绑;

导入安卓。查看。查看;

导入安卓。小部件。适配器视图;

导入安卓。小部件。数组适配器;

导入安卓。小部件。列表视图;

公共类设备活动扩展对话框

{

上下文_上下文;

公共onconfirm listener onconfirm listener;

私有列表视图设备视图;

私有蓝牙适配器mBluetoothAdapter=null

public ArrayList蓝牙设备设备列表=new ArrayList蓝牙设备();

公共设备活动(上下文上下文)

{

超级(上下文);

这个. context=上下文;

//TODO自动生成的构造函数存根

}

@覆盖

受保护的void onCreate(绑定保存的实例状态)

{

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_设备);

设备视图=(ListView)findViewById(r . id。设备视图);

blue init();

on resume();

}

//初始化蓝牙

私有void BlueInit()

{

//获取蓝牙适配器

mBluetoothAdapter=蓝牙适配器。getdefaultadapter();

//请求开启蓝牙

如果(!mBluetoothAdapter.isEnabled())

{

Intent enableBtIntent=新意图(蓝牙适配器.ACTION _ REQUEST _ ENABLE);

((活动)_上下文)。startActivityForResult(enableBtIntent,1);

}

}

简历上受保护的void()

{

//将已配对的设备添加到列表中

setbluetooth设备配对设备=mbluetoothadapter。getbondedevices();

设备列表。clear();

if (pairedDevices.size() 0)

{

String[]name list=new String[配对的设备。size()];

int I=0;

用于(蓝牙设备设备:成对设备)

{

deviceList.add(设备);

名称列表[I]=设备。getname()' \ n '设备。get address();

我;

}

//创建一个ArrayAdapter

ArrayAdapter?adapter=new ArrayAdapterObject((Activity)_ context,android .r .布局simple _ expandable _ list _ item _ 1,名称列表);

DeviceView.setAdapter(适配器);

//注册一个元素单击事件监听方法

设备视图。setonitemclicklistener(新设备click());

}

}

//事件按钮触发

公共类设备点击实现适配器视图.OnItemClickListener

{

@覆盖

public void onItemClick(适配器视图?arg0,View view,int position,long id)

{

onconfirm侦听器。确认(设备列表。get(位置));

}

}

OnConfirmListener上的公共接口

{

公共空的确认(蓝牙设备装置);

}

}

3.BluetoothSocket

蓝牙插座蓝牙的(电源)插座接口,与传输控制协议(Transmission Control Protocol)套接字类似,设备添加完成可以开始连接设备。

这里我直接写了一个会议通讯类

包装渠道;

导入Java。io。io异常;

导入Java。io。inputstream

导入Java。io。输出流;

导入Java。io。unsupportedencodingexception

导入Java。util。uuid

导入安卓。蓝牙。蓝牙设备;

导入android .蓝牙。蓝牙插座;

导入安卓。OS。处理者;

导入安卓。OS。消息;

公共类会话扩展线程

{

私人的蓝牙_ device=null

私人的蓝牙_ socket=null

私有输出流_输出流

private InputStream _ inStream=null;

public布尔值IsConnect=false

公共字符串名称="";

公共字符串地址="";

处理程序_处理程序

公共会话(蓝牙设备_设备,处理器_处理器)

{

这个. handler=_ handler

这个. device=_ device

这个。名字=这个.设备。getname();

这个。地址=这个.设备。get address();

IsConnect=false

尝试

{

//蓝牙串口服务对应的UUID。如使用的是其它蓝牙服务,需更改下面的字符串

//UUID MY _ UUID=uuid。from字符串(' 00001101-0000-1000-8000-00805 F9 b 34 FB ');

_套接字=_设备。createrfcomsockettoservicerecord(uuid。from string(' 00001101-0000-1000-8000-00805 F9 b 34 FB ');

} catch(异常e)

{

返回;

}

}

公共空的连接()

{

尝试

{

_插座。connect();

_ outStream=_ socket。获取输出流();

_ inStream=_ socket。getinputstream();

IsConnect=true

}

捕捉(IOException e)

{

IsConnect=false

尝试{

_插座。close();

} catch (IOException e1)

{

}

返回;

}

}

@覆盖

公共无效运行()

{

字节[]缓冲区=新字节[1024];

int len=0;

而(真)

{

//从输入流读取

尝试

{

len=_ instream。读取(缓冲区);

} catch (IOException e)

{

继续;

}

if(len 0)

{

消息msg=_ handler。获取消息();

味精。什么=0;

尝试

{

msg.obj=新字符串(缓冲区,‘UTF-8’);

} catch(UnsupportedEncodingException e)

{

}

_ handler。发送消息(msg);

}

}

}

公共void发送(String _value)引发IOException

{

_ out流。写(_值。getbytes());

}

公共无效关闭()引发IOException

{

IsConnect=false

_插座。close();

}

}

接下来就是使用,弹窗选择设备。

public void btnDevice_Click(视图v)//选择设备

{

最终设备活动_设备对话框=新设备活动(这个);

_设备对话框。onconfirm listener=新的onconfirm listener()

{

@覆盖

公共空的确认(蓝牙设备)

{

_设备=设备;

txt设备。settext(设备。getname()' \ n '设备。get address());

_设备对话框。disass();

btnConnect.setText('连接设备');

btnConnect.setVisibility(视图。可见);

btnSend.setVisibility(视图。隐形);

}

};

_设备对话框。show();

}

选择完设备,建立会议连接设备。

public void btnConnect_Click(视图v)//连接设备

{

_session=新会话(_设备,_处理程序);

setTitle(_session .姓名);

_ session。connect();

if (_session .IsConnect)

{

_ session。start();

btnConnect.setVisibility(视图。隐形);

btnSend.setVisibility(视图。可见);

btnSend.setText('发送消息');

}

其他

{

吐司。制作文本(主要活动。这个,

'连接失败,

吐司。长度_长)。show();

btnSend.setVisibility(视图。隐形);

}

}

建立回调函数。

Handler _ handler=新处理程序(Looper.getMainLooper())

{

@覆盖

公共void handleMessage(消息消息)

{

超级棒。处理消息(msg);

EDX消息。settext(EDX消息。gettext()' \ n ' msg。obj);

}

};

发送消息。

public void btnSend_Click(视图v)//发送消息

{

尝试

{

_session .Send(edxContent.getText().toString());

} catch (IOException e)

{

吐司。制作文本(主要活动。这个,

'发送失败,

吐司。长度_长)。show();

}

}

基本上操作就这些。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: