这篇文章主要为大家详细介绍了机器人实现蓝牙串口通讯,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了机器人实现蓝牙串口通讯的具体代码,供大家参考,具体内容如下
最近在弄蓝牙串口,参考了不少网上的大佬,加上自己早期对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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。