android即时通讯demo开源(android studio实现聊天功能)

Android串口通信可以实现设备与设备之间通过设备线连接进行数据(消息)传递
(一)导入so库

android即时通讯demo开源(android studio实现聊天功能)

(二)在moudle的build中添加jniLibs

buildTypes { sourceSets { main { jni.srcDirs = [] } } }12345

(三)添加Google的SerialPort
添加的是Google的所以必须创建android_serialport_api包
如需要更改SerialPort、SerialPortFinder位置需要重新生成so库

android即时通讯demo开源(android studio实现聊天功能)

(四)创建串口通信工具类SerialPortUtils

package com.demo.serialport;import android.util.Log;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android_serialport_api.SerialPort;/** * @author renquan */public class SerialPortUtils { private final String TAG = "SerialPortUtils";// private String path = "/dev/ttyS1";// private int baudrate = 9600; public boolean serialPortStatus = false; //是否打开串口标志 public String data_; public boolean threadStatus; //线程状态,为了安全终止线程 public SerialPort serialPort = null; public InputStream inputStream = null; public OutputStream outputStream = null; public ChangeTool changeTool = new ChangeTool(); /** * 打开串口 * @return serialPort串口对象 */ public SerialPort openSerialPort(String path,int baudrate){ try { serialPort = new SerialPort(new File(path),baudrate,0); this.serialPortStatus = true; threadStatus = false; //线程状态 //获取打开的串口中的输入输出流,以便于串口数据的收发 inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); new ReadThread().start(); //开始线程监控是否有数据要接收 } catch (IOException e) { Log.e(TAG, "openSerialPort: 打开串口异常:" + e.toString()); return serialPort; } Log.d(TAG, "openSerialPort: 打开串口"); return serialPort; } /** * 关闭串口 */ public void closeSerialPort(){ try { inputStream.close(); outputStream.close(); this.serialPortStatus = false; this.threadStatus = true; //线程状态 serialPort.close(); } catch (IOException e) { Log.e(TAG, "closeSerialPort: 关闭串口异常:"+e.toString()); return; } Log.d(TAG, "closeSerialPort: 关闭串口成功"); } /** * 发送串口指令(字符串) * @param data String数据指令 */ public void sendSerialPort(String data){ Log.d(TAG, "sendSerialPort: 发送数据"); try { byte[] sendData = data.getBytes(); //string转byte[] this.data_ = new String(sendData); //byte[]转string if (sendData.length > 0) { outputStream.write(sendData); outputStream.write('n'); //outputStream.write('r'+'n'); outputStream.flush(); Log.d(TAG, "sendSerialPort: 串口数据发送成功"); } } catch (IOException e) { Log.e(TAG, "sendSerialPort: 串口数据发送失败:"+e.toString()); } } /** * 单开一线程,来读数据 */ private class ReadThread extends Thread{ @Override public void run() { super.run(); //判断进程是否在运行,更安全的结束进程 while (!threadStatus){ Log.d(TAG, "进入线程run"); //64 1024 byte[] buffer = new byte[64]; int size; //读取数据的大小 try { size = inputStream.read(buffer); if (size > 0){ Log.d(TAG, "run: 接收到了数据:" + changeTool.ByteArrToHex(buffer)); Log.d(TAG, "run: 接收到了数据大小:" + String.valueOf(size)); onDataReceiveListener.onDataReceive(buffer,size); } } catch (IOException e) { Log.e(TAG, "run: 数据读取异常:" +e.toString()); } } } } //数据回调 public OnDataReceiveListener onDataReceiveListener = null; public static interface OnDataReceiveListener { public void onDataReceive(byte[] buffer, int size); } public void setOnDataReceiveListener(OnDataReceiveListener dataReceiveListener) { onDataReceiveListener = dataReceiveListener; }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
package com.demo.serialport;/** * @author renquan */public class ChangeTool { /** * byte数组转16进制字符串 * * @param bytes byte数组 * @return 16进制字符串 */ public String ByteArrToHex(byte[] bytes) { String strHex; StringBuilder sb = new StringBuilder(); for (byte aByte : bytes) { strHex = Integer.toHexString(aByte & 0xFF); sb.append(" ").append((strHex.length() == 1) ? "0" : "").append(strHex); // 每个字节由两个字符表示,位数不够,高位补0 } return sb.toString().trim(); } /** * byte字节转int * * @param b byte字节 * @return int */ public static int byteToInt(byte b) { int x = b & 0xff; if (x == 127) { return 0; } return x; }}123456789101112131415161718192021222324252627282930313233343536373839
package com.demo.serialport;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import androidx.appcompat.app.AppCompatActivity;/** * @author renquan */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText mMessage; private Button mOpen; private Button mSend; private Button mClose; private SerialPortUtils serialPortUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); //串口数据监听事件 serialPortUtils.setOnDataReceiveListener(new SerialPortUtils.OnDataReceiveListener() { @Override public void onDataReceive(byte[] buffer, int size) { Log.d("TAG", "进入数据监听事件中。。。" + new String(buffer)); } }); } private void init() { initView(); serialPortUtils = new SerialPortUtils(); } private void initView() { mMessage = (EditText) findViewById(R.id.message); mOpen = (Button) findViewById(R.id.open); mOpen.setOnClickListener(this); mSend = (Button) findViewById(R.id.send); mSend.setOnClickListener(this); mClose = (Button) findViewById(R.id.close); mClose.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.open: // TODO 20/12/28 serialPortUtils.openSerialPort("/dev/ttyS9",9600); break; case R.id.send: // TODO 20/12/28 serialPortUtils.sendSerialPort(mSend.getText().toString()); break; case R.id.close: serialPortUtils.closeSerialPort(); // TODO 20/12/28 break; default: break; } }}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Demo——github地址

派优网部分新闻资讯、展示的图片素材等内容均为用户自发上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习交流。用户通过本站上传、发布任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请 联系我们一经核实,立即删除。并对发布账号进行封禁。
(0)
派大星的头像派大星
0

相关推荐

  • 微信群500升级1000人群(微信如何申请1000人大群)

    常言道,物以类聚,人以群分。我们在微信聊天时也会加入形形色色的微信群,比如,功能性较强的业主群、家长群;兴趣爱好型的登山群、电影群以及按地域划分的城市群等等。那么,你知道微信群人数…

    独守空城的头像 独守空城
    2022年12月13日 资讯投稿
  • 农业获取蚕丝方法有哪些,蚕丝采集技巧和种植注意事项 资讯投稿

    农业获取蚕丝方法有哪些,蚕丝采集技巧和种植注意事项

    蚕丝是一种非常珍贵的天然纤维,被广泛用于纺织和制造高档服装。蚕丝的采集和种植是一项非常重要的农业活动,下面我们将介绍一些农业获取蚕丝的方法、蚕丝采集技巧和种植注意事项。 一、农业获…

    纨绔姐的头像 纨绔姐
    2023年9月19日
  • 免费合并pdf编辑软件(pdf文件编辑器使用方法) 资讯投稿

    免费合并pdf编辑软件(pdf文件编辑器使用方法)

    研究生、博士生要经常查阅一些PDF格式的文档,还要进行修改。老师们准备教学资料的时候也要修改PDF文档,就是一些办公人士也要面临修改PDF文档的问题。那么,很多修改PDF文档的工具…

    发布专员的头像 发布专员
    2021年12月24日
  • 戴望舒诗集有哪些(分享戴望舒的几首诗)

    白蝴蝶 给什么智慧给我, 小小的白蝴蝶, 翻开了空白之页, 合上了空白之页? 翻开的书页: 寂寞; 合上的书页: 寂寞。 游子谣 海上微风起来的时候, 暗水上开遍青色的蔷薇。 --…

    艾妮才的头像 艾妮才
    2022年10月18日 资讯投稿
  • 微信公众号收费吗(微信公众号多少钱) 资讯投稿

    微信公众号收费吗(微信公众号多少钱)

    很多人都玩微信公众号,但又不知道微信公众号注册是否收费,下面听小编为大家讲讲吧。 操作方法 01微信公众号是需要收钱的,不过针对不同的类型。也就是所有的服务号、以及政府、传统媒体、…

    戏骨清风的头像 戏骨清风
    2022年11月15日
  • 淘宝极速推广待审核什么意思(关于淘宝店铺极速推广效果) 资讯投稿

    淘宝极速推广待审核什么意思(关于淘宝店铺极速推广效果)

    现在做淘宝最主要的就是要去推广了,并且淘宝系统也给各位朋友推出了很多的功能,比如这个淘宝极速推就是一个不错的工具,但是很多人不知道这个在做的时候是需要审核的,那会审核多久呢?请看介…

    一只汪喵喵的头像 一只汪喵喵
    2024年4月3日
  • 怎样解决电脑小广告,实用的电脑广告屏蔽方法 资讯投稿

    怎样解决电脑小广告,实用的电脑广告屏蔽方法

    电脑小广告是我们在使用电脑时最常见的麻烦之一,它们会在我们浏览网页时不断地出现,影响我们的视觉体验,甚至还有可能带来安全隐患。为了解决这个问题,我们可以采用一些实用的电脑广告屏蔽方…

    痞子配酒的头像 痞子配酒
    2023年7月31日
  • 属兔的狮子座男生性格特点分析,属兔男生的爱情观和狮子座男生的性格特点 资讯投稿

    属兔的狮子座男生性格特点分析,属兔男生的爱情观和狮子座男生的性格特点

    属兔的狮子座男生,是一个充满矛盾的存在。一方面,他们拥有狮子座男生的自信、热情和领导力,另一方面,他们又具有属兔男生的温和、善良和敏感。 性格特点 狮子座男生的自信和热情,使得他们…

    派大星的头像 派大星
    2023年7月21日
  • 阿里巴巴网站为什么没有询价的选项(阿里巴巴店铺询盘很少的原因) 资讯投稿

    阿里巴巴网站为什么没有询价的选项(阿里巴巴店铺询盘很少的原因)

    在1688原有的大企业采购平台中,主要通过询价、报价撮合的模式为企业提供大宗采购的服务。而1688采购商城则为企业非计划性采购的需求提供商家筛选、集中议价的服务。电商在线讯 12月…

    一只汪喵喵的头像 一只汪喵喵
    2024年1月28日
  • 火山土豆美食制作方法 资讯投稿

    火山土豆美食制作方法

    火山土豆是一道美味可口的特色美食,它的制作方法简单易学,口感鲜美,深受人们的喜爱。下面我们就来介绍一下火山土豆的制作方法。 材料准备: 土豆、面粉、***蛋、盐、油、葱花、辣椒粉、…

    阳阳妈的头像 阳阳妈
    2023年8月17日
返回顶部

深圳SEO优化公司金昌外贸网站制作推荐和县企业网站设计大同百度网站优化排名价格佛山建设网站哪家好贵阳seo价格滁州企业网站改版报价乌海网站seo优化报价天津网站推广工具价格四平关键词按天收费哪家好肇庆关键词排名包年推广公司抚顺品牌网站设计报价株洲网站制作价格南平企业网站改版价格安康网站推广哪家好迪庆网站优化排名公司爱联阿里店铺托管报价迁安网站优化按天收费推荐山南网站优化按天计费价格龙华网站设计多少钱诸城seo网站优化玉林网站优化软件多少钱铁岭百搜标王多少钱蚌埠优秀网站设计多少钱上海网页制作推荐绵阳网站优化推广价格眉山营销网站哪家好昌都SEO按天计费推荐盐田百姓网标王朝阳百度爱采购报价遂宁网站改版价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化