关于安卓蓝牙开发总结

这几个星期提出了一个小项目,于是和团队日夜加工,大概就是传感器连接51单片机,51再通过蓝牙发送信息到手机端。前几天一直在研究单片机里面的程序,这几天是负责写安卓客户端接收的界面,涉及到有关安卓蓝牙的开发,仔细学习了下,略有心得,做个总结,新手感悟,望大神指点。注意,这个主要是和单片机蓝牙相连,与手机互连略有不同的,主要体现在UUID那块,也是需要获取,因为单片机的串口蓝牙UUID是固定的。整体思路可以参考。




首先得介绍关于蓝牙的几个重要的类,BluetoothAdapter,BluetoothSocket,BluetoothDevice,大概用这几个类就能做出蓝牙的基本功能,当然蓝牙类不多,还有其他的,详细的大家去看看API吧。




首先来讲BluetoothAdapter,这个类是用来获取本地的蓝牙,以便后续对本地蓝牙进行操作。
BluetoothAdapter  adapter  =   BluetoothAdapter. getDefaultAdapter ()       ————本地蓝牙对象的获得




再来是BluetoothDevice,这个类是用来获取搜索到附近的蓝牙设备的对象,也就是说搜到对方了,用BluetoothDevice去获取一个对象,然后对象里装有名称,地址之类可用的
BluetoothDevice   device =  intents.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)  ————附近蓝牙对象的获得,这个intent我们稍后再说。




最后是BluetoothSocket,顾名思义,就是蓝牙通信的类了,可以获得流对象。
BluetoothSocket  clienSocket=device.createRfcommSocketToServiceRecord(uuid);   ——————定义与XX蓝牙连接的socket
clienSocket.connect();   ——————开始连接


重要的类就是这三个,至于类中的方法不详细说明,用提示快捷键去查看下,各种方法也是见名知意,接下来我们详细讲下思路。




 
一、我首先是初始化了一个本地蓝牙的对象,用来对我手机上的蓝牙进行操作嘛,再次之前,我先用代码打开了蓝牙的开关。
        
         Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
         Toast.makeText(MainActivity.this, "打开蓝牙", Toast.LENGTH_SHORT).show();
         startActivityForResult(intent, 1);
         BluetoothAdapter  adapter  =   BluetoothAdapter. getDefaultAdapter ();
         adapter.startDiscovery();






二、我注册了一个广播接收,为什么要注册广播接收呢,原来仔细了解蓝牙机制,大概意思是打开搜索附近蓝牙设备时,如果搜索到了,会返还相应的信号,那我们如何接收这些      信号呢?自然是注册一个广播接受者啦,来看看它到底返回的信息。


      class myBroadcastReceiver extends BroadcastReceiver
{
public void onReceive(Context arg0, Intent intents)
{
String action = intents.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) 
   {
           device = intents.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
          
           listData.add(device.getName() + "\n" + device.getAddress());
           Toast.makeText(MainActivity.this, "搜索中", Toast.LENGTH_SHORT).show();
           
           }
if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
  {
Toast.makeText(MainActivity.this, "搜索完毕", Toast.LENGTH_SHORT).show();
   }
 
 listview.setAdapter(mArrayAdapter);
}
}


        解释:这段代码还是挺简单的吧~就是写个类继承BroadcastReceiver,然后重新里面的onReceive方法,这个方法里呢,它会获取一个intent,不要小瞧这个intent哦                 ,里面可是包含着很多拥有信息的,首先你这个intent是干嘛的干嘛的想干嘛,好,我获取你的action信息来看看你的举动目的,这个举动目的也就是我们刚才说的                 返回的信息,一般来说有BluetoothDevice.ACTION_FOUND(就是找到设备啦)、BluetoothAdapter.ACTION_DISCOVERY_FINISHED(找累了,找完了                  )、诸如此类的常量信息。然后我们做个判断,再用刚才讲的获取到找到的device设备,这样就OK了.






三、找到了设备,那就连接咯,还等什么。这时就用到BluetoothSocket这个类了。恩,没什么好说的,这步比较简单。不过注意捕捉异常。


      BluetoothSocket  clienSocket=device.createRfcommSocketToServiceRecord(uuid);   ——————定义与XX蓝牙连接的socket
      clienSocket.connect();




四、连接了干嘛,自然是通信啦,到这步其实就不太算蓝牙的知识范围啦,就是我们以前学的输入输出流,获取信息啦,这里我尝试了一个比较新潮的用法(对我而言= = ),        以前用的是thread+handle,现在用下传说的AsyncTask。这里写下简单代码步骤。


      一个类继承了AsyncTask类,重写protected Boolean doInBackground(Void... params)方法,在这里加入我们想要处理的耗时的事情,自然是数据的获取了。
       InputStream  is=MainActivity.clienSocket.getInputStream();   
        i = is.read(arrayOfByte);
      str_receiver = new String(arrayOfByte, 0, i);
      chs=str_receiver.toCharArray();
      length =chs.length;
      publishProgress();


     然后在protected void onProgressUpdate(Integer... values)方法里更新UI,这样就完成啦~~~~~~~








PS:整体理解了还是比较简单的,第一次写总结,也不知道格式或者思路条理这些好不好,大家见谅,其实在开发过程中,还有关于listview,UUID之类的小内容,就没有扩展       开来总结了,今天主题是蓝牙嘛,以后有机会也写写,包括异步处理的两种方法。那蓝牙总结就写到这里,最后附录那里还有关于单片机串口的UUID,省的要做同样项目的       小伙伴们就不用到处找了。




附录:单片机串口UUID     "00001101-0000-1000-8000-00805F9B34FB"
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ayo464434914/article/details/48894629
文章标签: 安卓 蓝牙 单片机
个人分类: 蓝牙 单片机 安卓
上一篇初步动手小制作
下一篇SQLite数据库总结一
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭