美文网首页
bluetooth 安卓

bluetooth 安卓

作者: 招风小妖怪 | 来源:发表于2019-10-15 18:03 被阅读0次

    搜索配对什么的在手机系统设置里就能完成,本人太懒暂时没学,哎
    每个代码块都可以独立运行,如果要和在一起,记得把多定义的变量删除

    这篇文章将的内容如下,

    判断是否支持蓝牙
    判断蓝牙是否打开
    打开蓝牙
    搜索蓝牙
    蓝牙配对
    查看已经配对的设备
    连接蓝牙
    发送数据
    接收数据

    配置权限

    image.png
    <!-- 安卓6.0以下 -->
    <!-- 使用蓝牙的权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <!-- 扫描蓝牙设备或者操作蓝牙设置 -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    
    <!-- 安卓6.0以上 -->
    <!-- 使用蓝牙的权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <!-- 扫描蓝牙设备或者操作蓝牙设置 -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <!--模糊定位权限,仅作用于6.0+-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--精准定位权限,仅作用于6.0+-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    判断是否支持蓝牙

    BluetoothAdapter mBluetoothAdapter;
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    
    if(mBluetoothAdapter == null){
        // 说明此设备不支持蓝牙操作
    }else {
        // 说明此设备支持蓝牙操作
    }
    

    判断蓝牙是否打开,没有就打开蓝牙

    BluetoothAdapter mBluetoothAdapter;
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if(!mBluetoothAdapter.isEnabled()){
        //蓝牙没有打开
        mBluetoothAdapter.enable();//打开蓝牙
    }else
    {
        //蓝牙已经打开了
    }
    

    查看已经配对的设备

    BluetoothAdapter mBluetoothAdapter;
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    if(pairedDevices.size() > 0){
        for(BluetoothDevice device:pairedDevices){
            // 这里打印出来的就是已经配对的设备名和mac地址
          //可以记下你要连接的蓝牙mac地址,等下连接要用
            System.out.println("\n===="+device.getName()+" : "+ device.getAddress());
    
        }
    }
    

    连接蓝牙设备

    BluetoothAdapter mBluetoothAdapter;//你自己的手机蓝牙
    BluetoothDevice device;//你准备连接哪个蓝牙
    BluetoothSocket socket;//连接成功后返回的socket服务,类似TCP的socket
    String remoteDevMac="20:19:05:14:22:94";//选一个已经配对的设备的mac地址,
    String MY_UUID = "00001101-0000-1000-8000-00805F9B34FB";   //SPP服务UUID号,
    //这个自行百度,不同的UUID可以提供不同的服务,
    //我这里这个UUID说明使用的是串口服务
    try{
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        device = mBluetoothAdapter.getRemoteDevice(remoteDevMac);
        socket = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
        socket.connect();
        //连接成功
    }catch(IOException e){
        //连接失败
    }
    

    发送消息//前提要连接成功

    OutputStream os = socket.getOutputStream();
    os.write("hello".getBytes());//发送hello
    

    接收消息//前提要先连接

    新建一个线程用来接收

    private InputStream is;//这个放在类的私有变量里
    is = socket.getInputStream();//这句放在你连接成功之后,不然报错
    new Thread(){
        public void run(){
            int num = 0;
            byte[] buffer = new byte[1024];
            byte[] buffer_new = new byte[1024];
            int i = 0;
            int n = 0;
            while(true)
            {
                try {
    
                    if(socket!=null && socket.isConnected()) {
    
                        num = is.read(buffer);//获取本次读取长度
    //
                        for(i=0;i<num;i++){
                            if((buffer[i] == 0x0d)&&(buffer[i+1]==0x0a)){
                                //收到0x0d 0x0a才算结束,你也可以自定义结束符号
                                String str = new String(buffer_new, 0, n);
                                System.out.println("=================:"+str+"---"+n);//打印收到的数据和数据的长度
    
                                i++;//一定要加上,因为本次读取0x0d,下一次不用读取0x0a,让他跳过
                                n=0;
                            }else{
                                buffer_new[n] = buffer[i];
                                n++;
                            }
    
                        }
                    }
    
                }catch(IOException e){
                    System.out.println("=========================接收出错===============================");
    
                }
            }
        }
    }.start();
    

    相关文章

      网友评论

          本文标题:bluetooth 安卓

          本文链接:https://www.haomeiwen.com/subject/qsosmctx.html