Android蓝牙开发(三)之蓝牙通信

简介: Android蓝牙开发

1.蓝牙通信简介

 无论是做Java还是Android开发的朋友肯定都比较熟悉Socket的连接,在java中通信用的是Socket,同样的蓝牙之间通信(这里说的是经典蓝牙)方式也是Socket,只不过是BluetoothSocket,同样的也要有Socket服务端和客户端

2.蓝牙通信消息接收端

设备连接后,跳转到通讯界面,首先我们要在通讯界面开启消息接收端服务,同样的我们要在一个线程中开启

得到bluetooth的inputstream输入流接收即可,同时我们可能接收到的是文件,需要将文件保存下来,记得申明相关权限。

消息接收端服务代码如下:

public  void  receiveMessage(){
      if (APP.bluetoothSocket == null){
          return;
      }
    try {
        InputStream inputStream = APP.bluetoothSocket.getInputStream();
        // 从客户端获取信息
        BufferedReader bff = new BufferedReader(new InputStreamReader(inputStream));
        String json;
        while (true) {
            while ((json = bff.readLine()) != null) {
                EventBus.getDefault().post(new MessageBean(RECEIVER_MESSAGE,json));
            }
            if ("file".equals(json)) {
                FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/test.gif");
                int length;
                int fileSzie = 0;
                byte[] b = new byte[1024];
                // 2、把socket输入流写到文件输出流中去
                while ((length = inputStream.read(b)) != -1) {
                    fos.write(b, 0, length);
                    fileSzie += length;
                    System.out.println("当前大小:" + fileSzie);
                    //这里通过先前传递过来的文件大小作为参照,因为该文件流不能自主停止,所以通过判断文件大小来跳出循环
                }
                fos.close();
                EventBus.getDefault().post(new MessageBean(RECEIVER_FILE,"文件保存成功"));
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

image.gif

3.蓝牙通信发送文本消息

通信和java中socket类似就不具体讲解了,需要注意的是当这里收到消息或者发送消息成功时,我这里用的是Eventbus异步通知

代码如下次:

/**
 * 发送文本消息
 *
 * @param message
 */
public static void sendMessage(String message) {
    if (APP.bluetoothSocket == null || TextUtils.isEmpty(message)) return;
    try {
        message += "\n";
        OutputStream outputStream = APP.bluetoothSocket.getOutputStream();
        outputStream.write(message.getBytes("utf-8"));
        outputStream.flush();
        EventBus.getDefault().post(new MessageBean(BltContant.SEND_TEXT_SUCCESS));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

image.gif

4.蓝牙通信发送文件

/**
 * 发送文件
 */
public static void sendMessageByFile(String filePath) {
    if (APP.bluetoothSocket == null || TextUtils.isEmpty(filePath)) return;
    try {
        OutputStream outputStream = APP.bluetoothSocket.getOutputStream();
        //要传输的文件路径
        File file = new File(filePath);
        //说明不存在该文件
        if (!file.exists()){
            EventBus.getDefault().post(new MessageBean(BltContant.SEND_FILE_NOTEXIT));
            return;
        }
        //说明该文件是一个文件夹
        if (file.isDirectory()) {
            EventBus.getDefault().post(new MessageBean(BltContant.SEND_FILE_IS_FOLDER));
            return;
        }
        //1、发送文件信息实体类
        outputStream.write("file".getBytes("utf-8"));
        //将文件写入流
        FileInputStream fis = new FileInputStream(file);
        //每次上传1M的内容
        byte[] b = new byte[1024];
        int length;
        int fileSize = 0;//实时监测上传进度
        while ((length = fis.read(b)) != -1) {
            fileSize += length;
            Log.i("socketChat", "文件上传进度:" + (fileSize / file.length() * 100) + "%");
            //2、把文件写入socket输出流
            outputStream.write(b, 0, length);
        }
        //关闭文件流
        fis.close();
        //该方法无效
        //outputStream.write("\n".getBytes());
        outputStream.flush();
        EventBus.getDefault().post(new MessageBean(BltContant.SEND_FILE_SUCCESS));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

image.gif


目录
相关文章
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1373 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1002 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1097 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
8月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
858 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
7月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
376 0
|
8月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1098 6
|
10月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
647 11
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
4579 77
|
10月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
428 0
|
11月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
469 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章