`
wen742538485
  • 浏览: 241103 次
  • 性别: 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:手机设备的蓝牙硬件权限要打开,否则就没法运行。
分享到:
评论

相关推荐

    基于蓝牙Socket通讯的聊天室

    总之,“基于蓝牙Socket通讯的聊天室”是一个结合了蓝牙通信、Socket编程和Android应用开发的综合项目。它不仅涉及到硬件层面的蓝牙连接,还涵盖了软件层面的网络编程和用户界面设计,对于提升开发者在移动设备间的...

    蓝牙socket通信.实现快速文件传输/快速开发

    在Android或Java开发中,实现蓝牙Socket通信通常需要以下步骤: 1. **初始化蓝牙适配器**:获取系统的蓝牙适配器,并检查蓝牙功能是否可用。 2. **搜索蓝牙设备**:遍历附近的蓝牙设备,并根据需要进行设备匹配。 3....

    基于Android的BlueTooth开发手机蓝牙和蓝牙模块通讯

    5. **蓝牙服务和UUID**:蓝牙通信通常基于特定的服务,每个服务有一个唯一的UUID。`BluetoothGatt`是用于GATT(Generic Attribute Profile)服务的接口,适用于BLE(Bluetooth Low Energy)设备。对于经典蓝牙,一般...

    android studio 蓝牙 socket 范例

    综上所述,这个范例涵盖了Android蓝牙通信的基础,对于想要学习如何在Android应用中使用蓝牙功能的开发者来说非常有价值。通过深入理解这些知识点,你可以创建自己的蓝牙应用,实现设备之间的数据交换。

    androidstudio实现socket通讯

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

    Android蓝牙socket应用编程-心电图-动态折线图demo

    这个"Android蓝牙socket应用编程-心电图-动态折线图demo"涵盖了几个关键的知识点,让我们逐一深入探讨。 首先,**蓝牙协议**是实现设备间无线通信的基础。Android支持蓝牙低功耗(Bluetooth Low Energy, BLE)和...

    安卓wifi蓝牙相关-基于socket的Android与Android的蓝牙通讯包含服务端和客户端.rar

    在Android平台上,实现设备间的通信可以通过多种方式,如Wi-Fi直连、Wi-Fi热点、USB、NFC等,但这里...通过深入理解和实践这个示例,开发者可以掌握Android蓝牙通信的核心技术,为开发自己的蓝牙应用打下坚实的基础。

    蓝牙通信(android手机间通信)

    蓝牙通信在Android手机间的应用是移动设备之间进行无线数据传输的一种常见方式。通过蓝牙技术,两部Android手机可以实现文件共享、数据同步、游戏交互等多种功能。本文将深入探讨如何在Android平台上实现蓝牙通信,...

    C#Android蓝牙通信

    【C#与Android之间的蓝牙通信】是移动设备间交互的重要技术之一,特别是在物联网(IoT)和嵌入式系统中广泛应用。本示例是通过C#编写的应用程序与Android设备进行蓝牙连接,实现数据传输,如图片、语音和文字等。这种...

    android蓝牙通信(分为客户端,服务端)

    在Android平台上进行蓝牙通信是一项常见的...总的来说,构建Android蓝牙通信系统涉及多个步骤,包括设备发现、连接建立、数据传输和错误处理。通过客户端和服务端的协同工作,可以在Android设备间实现可靠的蓝牙通信。

    Android Studio蓝牙通信客户端Demo源码BTClient.rar

    在Android平台上进行应用程序开发时,Android Studio是Google官方推荐的...通过深入研究和理解这个BTClient Demo,开发者可以掌握Android蓝牙通信的基本原理和实践技巧,为自己的应用添加蓝牙通信功能打下坚实基础。

    基于android的安卓蓝牙串口助手(开发专用)

    Android蓝牙开发涉及的主要API是BluetoothAdapter和BluetoothSocket。BluetoothAdapter负责管理设备的蓝牙功能,包括开启、关闭蓝牙,搜索其他蓝牙设备等。而BluetoothSocket则用于建立和管理蓝牙连接,进行数据的...

    基于android的手机蓝牙通信软件

    总的来说,"基于Android的手机蓝牙通信软件"项目涵盖了蓝牙设备的发现、连接建立、数据传输和异常处理等多个方面,对于理解Android蓝牙编程具有很好的实践意义。开发者不仅需要熟悉Android的蓝牙API,还要掌握网络...

    Android 蓝牙通信简单实例

    本文将基于"Android蓝牙通信简单实例"这个话题,详细解释如何实现蓝牙的开启、搜索、配对、连接以及数据传输。 首先,Android的蓝牙功能主要通过`BluetoothAdapter`类来操作。`BluetoothAdapter.getDefaultAdapter...

    基于android蓝牙无线通信系统的实现.pdf

    "基于Android蓝牙无线通信系统的实现" 以下是基于Android蓝牙无线通信系统的实现中所涉及到的知识点: 一、Android蓝牙无线通信系统的基本概念 * 蓝牙技术是近距离无线通信技术,能够在短距离内进行数据交换 * ...

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

    在Android Studio中实现手机蓝牙串口通信是一项常见的任务,尤其对于开发物联网(IoT)应用或者需要设备间无线数据传输的项目来说。本项目提供的"android_studio手机蓝牙串口通信源代码"就是一个很好的起点,它能帮助...

    android 串口 上位机程序 集成wifi和蓝牙通信

    在Android平台上开发串口上位机程序,集成WiFi和蓝牙通信功能是一项常见的需求,尤其在物联网(IoT)和嵌入式系统中。这个程序设计允许Android设备作为客户端,通过WiFi或蓝牙与服务器端模块进行数据交互。下面将详细...

    android蓝牙通信demo

    总的来说,"android蓝牙通信demo"是一个展示如何在Android应用中使用蓝牙进行数据传输的实例,它涵盖了蓝牙设备的搜索、连接、数据发送和接收等核心步骤。通过学习和实践这个Demo,开发者能够掌握Android蓝牙通信的...

    蓝牙通信android程序

    通过这个项目,开发者可以深入理解Android蓝牙通信的原理和实践,为构建其他蓝牙应用场景如智能家居、物联网设备控制等打下基础。同时,项目也提供了良好的示例代码,有助于初学者快速上手蓝牙编程。

    基于Android手机蓝牙的实时通信

    在搜索到目标设备后,通过`createRfcommSocketToServiceRecord()`方法创建一个RFCOMM(串行端口协议)socket,这是蓝牙通信的标准协议。 客户端的角色是发起连接请求的一方。在找到服务端设备后,使用`...

Global site tag (gtag.js) - Google Analytics