`
wen742538485
  • 浏览: 228500 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

基于蓝牙socket开发Android蓝牙通信

阅读更多
http://www.cyqdata.com/android/article-detail-53225#

如何实现Android蓝牙通信?一般通过使用蓝牙虚拟串口,可以通过配置非常简单地实现,很多外置蓝牙GPS都用这种做法。
然而Android却不支持,因此不得不得使用第二种方式:蓝牙socket。
本示例不使用C++开发,借助于第三方.NET组件inthehand来实现。
手机端的初始化代码。其中的具体含义可参照http://android.tgbus.com/Android/tutorial/201103/346657.shtml。
    private PrintStream mPrintStream = null;
    private BufferedReader mBufferedReader = null;

    BluetoothAdapter myBluetoothAdapter = null;
    BluetoothServerSocket mBThServer = null;
    BluetoothSocket mBTHSocket = null;



    myBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        myBluetoothAdapter.enable();//open bth

        Intent discoverableIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//使得蓝牙处于可发现模式,持续时间150s
        discoverableIntent.putExtra(
                BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 150);
 下面是PC上的初始化核心代码:PC是作为客户端出现的。它需要通过搜索获取手机的蓝牙MAC地址,实现通信。GUID又名UUID,是标记硬件地址的一种方法。
   /// <summary>
        /// 打开端口
        /// </summary>
        /// <param name="Name">端口名称</param>
        /// <returns>成功否</returns>
        public bool OpenPort(string Name)
        {
            InTheHand.Net.Bluetooth.BluetoothRadio.PrimaryRadio.Mode = InTheHand.Net.Bluetooth.RadioMode.Connectable;
            InTheHand.Net.Sockets.BluetoothClient cli = new InTheHand.Net.Sockets.BluetoothClient();
            InTheHand.Net.Sockets.BluetoothDeviceInfo[] devices = cli.DiscoverDevices();
            foreach (InTheHand.Net.Sockets.BluetoothDeviceInfo device in devices)//设备搜寻
            {
                device.Update();
                device.Refresh();
                MessageBox.Show("设备已找到");
                break;
            }


            BluetoothDeviceInfo bd = new BluetoothDeviceInfo(devices[0].DeviceAddress);
            bluetoothClient = new BluetoothClient();

            Guid mGUID = Guid.Parse("fa87c0d0-afac-11de-8a39-0800200c9a66");
            bluetoothClient.Connect(devices[0].DeviceAddress, mGUID);//客户端对地址实现连接,这是一个阻塞线程,需要服务器端的回应
            ReceiveThread = new Thread(ReceiveMethod);
            ReceiveThread.Start();

            return true;
        }
        下面是手机接受PC端连接请求的方法:
  1     if (connected)
2                 {
3                     return;
4                 }
5                 try
6                 {
7                     mBThServer = myBluetoothAdapter
8                             .listenUsingRfcommWithServiceRecord(NAME_SECURE,
9                                     MY_UUID_SECURE);
10                 } catch (IOException e)
11                 {
12                     // TODO Auto-generated catch block
13                     e.printStackTrace();
14                 }
15
16                 try
17                 {
18                     mBTHSocket = mBThServer.accept();
19                 } catch (IOException e)
20                 {
21                     // TODO Auto-generated catch block
22                     e.printStackTrace();
23                 }
24                 try
25                 {
26                     mBufferedReader = new BufferedReader(new InputStreamReader(
27                             mBTHSocket.getInputStream()));
28                 } catch (IOException e1)
29                 {
30                     // TODO Auto-generated catch block
31                     e1.printStackTrace();
32                 }// 取得输入、输出流
33                 try
34                 {
35                     mPrintStream = new PrintStream(
36                             mBTHSocket.getOutputStream(), true);
37                     connected = true;
38                 } catch (IOException e)
39                 {
40                     // TODO Auto-generated catch block
41                     e.printStackTrace();
42                 }
   要通过手机发送数据,执行以下代码即可:
        mPrintStream.write(buff);
                } catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }// 发送给服务器
                mPrintStream.flush();
    PC端的接受代码:
  while (isConnecting)
            {

                try
                {
                    Stream peerStream = bluetoothClient.GetStream();
                    peerStream.Read(buffer, 0, PACKETLENGTH);
                  //dataprocess();
                }


                catch (Exception ex)
                {
                    isConnecting = false;
                    MessageBox.Show(ex.ToString());

                }
以下有几个需要注意事项:
1:inthehand.net.personal是PC端上一定要用得到的库,但注意这个库函数的版本,版本弄错了是很浪费时间的。
2:手机设备的蓝牙硬件权限要打开,否则就没法运行。
分享到:
评论

相关推荐

    androidstudio实现socket通讯

    Android通过socket套接字实现网络连接,通过ip地址和ip端口实现访问服务器,从而实现客户端和服务器的连接,然后实现两者数据的互连

    android_studio手机蓝牙串口通信源代码

    android_studio手机蓝牙串口通信源代码,我自己已经下载到手机上调试过,可以用。讲解清楚,十分受用!

    蓝牙4.0传输文件Socket通信批量传输选取的若干图片并显示

    -一台设备作为服务端,一台作为客户端,两台设备需要先蓝牙配对成功,然后才能开始打开APP进行操作。 - 一台手机作为服务端,右上方顶部ActionBar有一个按钮,点击后从本地图库添加图片和拍照获取图片。中间是...

    Android蓝牙通信

    android蓝牙开发小例子,实现了搜索蓝牙设备,发送请求建立连接,蓝牙设备间的socket通信。

    android与pc实现蓝牙通信聊天

    android设备的蓝牙作为客户端实现与 windows PC端蓝牙进行通信聊天,pc端为windows x64,java bluecove实现,此为android端的代码,服务端已经上传了,查看以前上传的资源

    Android智能穿戴设备开发指南

    内容包括Android开发技术基础、搭建Android应用开发环境、获取并编译源码、Android技术核心框架分析、HTTP网络通信、使用Socket实现数据通信、下载远程数据、上传数据、使用URL处理数据、处理XML数据、在穿戴设备中...

    linux下基于Bluez实现蓝牙SPP服务端demo

    基于Bluez实现了蓝牙串口通信,用来与手机端,pc端传输数据。蓝牙模块服务多种多样,这个小demo实现了linux下建立蓝牙服务端的demo,并带了一个客户端测试。 使用时,可通过两台设备,分别作为服务端可客户端,连接...

    Android蓝牙和Cors网络开发源码

    内含两个独立的模块:蓝牙通信和Cors...其中蓝牙通信是在android sdk中提供的关于蓝牙的sample的基础上修改完成的,cors网络通信则是本人自己根据项目需要结合socket网络编程技术完成的,经测试能正常拿到差分数据。

    物联网Android bluetooth 蓝牙通信

    然后介绍了基于Socket实现的蓝牙通信,以及基于蓝牙实现对等结构网络通讯。我们还介绍了蓝牙r发现服务协议的使用。 Android 蓝牙开发基本流程https://blog.csdn.net/q610098308/article/details/45248423android ...

    Android应用源码安卓源码包wifi蓝牙串口&Socket通讯窗口抖动Widget小组件等20个合集.zip

    android蓝牙连接打印机.rar samsung android 蓝牙4.0开发工具包和BLE例子.rar wifi信息扫描和rssi值检测.rar 【仿微信即时聊天】xmpp4Android 第一期.rar 串口开发的demo,里面包含JNI文件.rar 串口编程资料.rar ...

    android开发揭秘PDF

    第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...

    java实现windows蓝牙与android设备通信

    PC端使用java bluecove实现蓝牙服务端,与android设备的蓝牙进行通信聊天,bluecove为x64操作系统,此为服务端的代码,android端也已经上传,我的资源列表中找

    Android蓝牙聊天项目(非常详细)

    该项目是个人研究的Android蓝牙聊天项目,搜索附近蓝牙设备功能,可以通过蓝牙通信聊天。通过该项目,可以学习到蓝牙通信协议,通过学习BluetoothSocket和BluetoothServerSocket,同时也可以熟练掌握Socket与...

    Android Phone蓝牙通信方式总结(Socket与Gatt)

    Android手机间通过蓝牙方式进行通信,有两种常见的...其实无论是socket方式还是Gatt,Android设备间蓝牙通信都是一种CS(client-server)模式。 1)socket服务端: 使用listenUsingInsecureRfcommWithServiceRecord接口

    Android项目源码本站发的第三个蓝牙聊天项目

    本项目是一个基于安卓的蓝牙聊天项目源码也是本站分享的第三个蓝牙聊天项目源码(前两个自行在本站搜索),原理是两个设备想要通信的前提是要知道对方的存在,在普通的Socket开发中,只要一台设备上线,直接发送个...

    Android 蓝牙开发实例解析

    本文以实例的方式讲解Android蓝牙开发的知识。  1、使用蓝牙的响应权限 XML/HTML代码 &lt;uses android:name=android.permission.BLUETOOTH/&gt; &lt;uses android:name=android.permission.BLUETOOTH_ADMIN/&gt;  2、配置本...

    Android蓝牙聊天Demo(非常详细)

    该项目是个人研究的Android蓝牙聊天项目,搜索附近蓝牙设备功能,可以通过蓝牙通信聊天。通过该项目,可以学习到蓝牙通信协议,通过学习BluetoothSocket和BluetoothServerSocket,同时也可以熟练掌握Socket与...

    Android开发案例驱动教程 配套代码

    17.3.3 TCP Socket与蓝牙Socket的区别 465 17.3.4 BluetoothChat中的类 466 17.3.5 初始化本地蓝牙设备 467 17.3.6 查找蓝牙设备 471 17.3.7 管理连接 476 17.3.8 互相之间的通信 480 17.4 WiFi通信 484 ...

    Android应用开发揭秘pdf高清版

    《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...

Global site tag (gtag.js) - Google Analytics