android 蓝牙 通信 bluetooth

此例子基于 android demo

Android的蓝牙开发,虽然不多用,但有时还是会用到,  Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试需要两部手机
      由于公司用到了蓝牙,所以学习了一下,也和大家分享一下!


总体来说和网络 socket 很相似,监听,连接,成功后,发送数据;


  我将蓝牙分成了客户端和服务端,下载地址:

  http://download.csdn.net/detail/q610098308/8681065


  第一步:

先要在AndroidManifest.xml里加入权限

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permissionandroid:name="android.permission.BLUETOOTH" />


    看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,如下图,只有8个类

                1.jpg

 

  

1、获取本地蓝牙适配器

       // Get local Bluetooth adapter
      mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if(mBluetoothAdapter==null)                 //如果为空可能不存在蓝牙,退出;
        {
             Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
             return;
        }
       

      2、打开蓝牙

      if(!mAdapter.isEnabled()){

            //弹出对话框提示用户是后打开

            Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

             startActivityForResult(enabler, REQUEST_ENABLE);

           //不做提示,强行打开

           // mAdapter.enable();

}


   3,
建立连接,服务器端(BluetoothServerSocket)和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接

 1)服务器端:
  

    // Unique UUID for this application
    private static final UUID MY_UUID_SECURE =
        UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
    private static final UUID MY_UUID_INSECURE =
        UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");


BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord(serverSocketName,MY_UUID_SECURE);


serverSocket.accept();


2)
客户端:


//
还记得我们刚才在BroadcastReceiver获取了BLuetoothDevice么?


BluetoothSocket clienSocket=dcvice. createRfcommSocketToServiceRecord(UUID MY_UUID_INSECURE);


clienSocket.connect();


4
、数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式


1
)获取流


inputStream = socket.getInputStream();


outputStream = socket.getOutputStream();


2
)写出、读入

                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);


                    mmOutStream.write(buffer);          



demo是包括客户端和服务端;分别放到两个手机上就可以通信;大家改改应该就可以用;

http://download.csdn.net/detail/q610098308/8628675

http://download.csdn.net/detail/q610098308/8681065



原文地址:https://www.cnblogs.com/sharecenter/p/5621080.html