2012-06-29 200 views
8

我想通过一个简单的应用程序使用蓝牙的基本知识。我也喜欢笔记本电脑应用程序,所以我可以简单地调试蓝牙通信。下面的代码是我用笔记本电脑作为客户端(使用BlueCove 2.1.0)和平板电脑作为服务器(Android 2.2)的尝试。BlueCove,笔记本电脑,并与蓝牙Android平板电脑

从我所了解的情况来看,这应该像书面一样工作,并且笔记本电脑正在提取平板电脑及其提供的服务。但是,行"StreamConnection conn = (StreamConnection) Connector.open(url, Connector.READ_WRITE);"每次都返回null。

任何想法是怎么回事?下面是从代码的输出:上

BlueCove 2.1.0版本的Winsock
地址:68A3C44A5265
名称:WS1497
启动装置询问...
设备发现:2013E061D922
设备发现: 00242BFE7375
INQUIRY_COMPLETED
设备查询完成。
服务调查已开始。
来自:银河标签
服务搜索完成 - 代码:1
来自:WS1190
服务搜索完成 - 码:4
蓝牙设备:
1. 2013E061D922(银河标签)
2. 00242BFE7375(WS1190 )
btspp:// 2013E061D922:20;认证= FALSE;加密= FALSE;主=假---- = NULL
异常在线程 “主” 显示java.lang.NullPointerException
在MainClass.main(MainClass。 java:104)
BlueCove栈关机完成

这里是代码我使用:

笔记本电脑代码:

import java.io.DataInputStream; 
import java.io.IOException; 
import java.util.Vector; 

import javax.bluetooth.DeviceClass; 
import javax.bluetooth.DiscoveryAgent; 
import javax.bluetooth.DiscoveryListener; 
import javax.bluetooth.LocalDevice; 
import javax.bluetooth.RemoteDevice; 
import javax.bluetooth.ServiceRecord; 
import javax.bluetooth.UUID; 
import javax.microedition.io.Connector; 
import javax.microedition.io.StreamConnection; 

public class MainClass implements DiscoveryListener { 

// object used for waiting 
private static Object lock = new Object(); 

// vector containing the devices discovered 
private static Vector<RemoteDevice> vecDevices = new Vector<RemoteDevice>(); 
private static Vector<String> vecServices = new Vector<String>(); 

// main method of the application 
public static void main(String[] args) throws IOException { 

    // create an instance of this class 
    MainClass bluetoothDeviceDiscovery = new MainClass(); 

    // display local device address and name 
    LocalDevice localDevice = LocalDevice.getLocalDevice(); 

    System.out.println("Address: " + localDevice.getBluetoothAddress()); 
    System.out.println("Name: " + localDevice.getFriendlyName()); 

    // find devices 
    DiscoveryAgent agent = localDevice.getDiscoveryAgent(); 

    System.out.println("Starting device inquiry..."); 
    agent.startInquiry(DiscoveryAgent.GIAC, bluetoothDeviceDiscovery); 

    try { 
     synchronized (lock) { 
      lock.wait(); 
     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    System.out.println("Device Inquiry Completed. "); 
    System.out.println("Service Inquiry Started. "); 

    UUID uuids[] = new UUID[1]; 
    uuids[0] = new UUID("fa87c0d0afac11de8a390800200c9a66", false); 

    for (RemoteDevice rd : vecDevices) { 
     System.out.println("From: " + rd.getFriendlyName(false)); 
     agent.searchServices(null, uuids, rd, bluetoothDeviceDiscovery); 
     try { 
      synchronized (lock) { 
       lock.wait(); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    // print all devices in vecDevices 
    int deviceCount = vecDevices.size(); 

    if (deviceCount <= 0) { 
     System.out.println("No Devices Found ."); 
    } else { 
     // print bluetooth device addresses and names in the format [ No. 
     // address (name) ] 
     System.out.println("Bluetooth Devices: "); 
     for (int i = 0; i < deviceCount; i++) { 
      RemoteDevice remoteDevice = (RemoteDevice) vecDevices 
        .elementAt(i); 
      System.out.println((i + 1) + ". " 
        + remoteDevice.getBluetoothAddress() + " (" 
        + remoteDevice.getFriendlyName(false) + ")"); 
     } 
    } 

    // System.out.println("SR: " + sr.toString()); 
    for (String url : vecServices) { 
     try { 
      String url = sr 
        .getConnectionURL(
          ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); 
      StreamConnection conn = (StreamConnection) Connector.open(url, Connector.READ_WRITE); 
      System.out.println(url + " ----=" + conn); 
      DataInputStream din = new DataInputStream(
        conn.openDataInputStream()); 
      synchronized (lock) { 
       try { 
        lock.wait(10); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      while (din.available() != 0) { 
       System.out.print(din.readChar()); 
      } 
      System.out.println(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

}// end main 

// methods of DiscoveryListener 

/** 
* This call back method will be called for each discovered bluetooth 
* devices. 
*/ 
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { 
    System.out.println("Device discovered: " 
      + btDevice.getBluetoothAddress()); 
    // add the device to the vector 
    if (!vecDevices.contains(btDevice)) { 
     vecDevices.addElement(btDevice); 
    } 
} 

// no need to implement this method since services are not being discovered 
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { 
    for (ServiceRecord sr : servRecord) { 
     vecServices.add(sr.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false)); 
    } 
} 

// no need to implement this method since services are not being discovered 
public void serviceSearchCompleted(int transID, int respCode) { 
    System.out.println("Service search completed - code: " + respCode); 
    synchronized (lock) { 
     lock.notify(); 
    } 
} 

/** 
* This callback method will be called when the device discovery is 
* completed. 
*/ 
public void inquiryCompleted(int discType) { 
    switch (discType) { 
    case DiscoveryListener.INQUIRY_COMPLETED: 
     System.out.println("INQUIRY_COMPLETED"); 
     break; 

    case DiscoveryListener.INQUIRY_TERMINATED: 
     System.out.println("INQUIRY_TERMINATED"); 
     break; 

    case DiscoveryListener.INQUIRY_ERROR: 
     System.out.println("INQUIRY_ERROR"); 
     break; 

    default: 
     System.out.println("Unknown Response Code"); 
     break; 
    } 
    synchronized (lock) { 
     lock.notify(); 
    } 
}// end method 
}// end class 

安卓

package com.mira.Bluetooth; 

import java.io.IOException; 

import java.util.UUID; 

import android.app.Activity; 

import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 

import android.os.Bundle; 

import android.util.Log; 

public class BluetoothAndroidActivity extends Activity implements Runnable { 
    BluetoothServerSocket bss; 
    Thread t; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter(); 

     for (BluetoothDevice btd : bta.getBondedDevices()) { 
      Log.i("Bluetooth Device Found", 
        btd.toString() + "; " + btd.getName()); 
     } 

     try { 
      bss = 
bta.listenUsingRfcommWithServiceRecord("BluetoothChat", UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66")); 
      t = new Thread(this); 
      t.start(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     boolean bContinue = true; 
     while (bContinue) { 
      try { 
       Thread.sleep(100); 
      } catch (Exception e) { 

      } 

      try { 
       System.out.println("Listening for connection"); 
       BluetoothSocket bs = bss.accept(); 
       System.out.println("Connection received"); 
       bs.getOutputStream().write("Hello BlueTooth World".getBytes()); 
       bs.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       bContinue = false; 
      } 
     } 
    } 

    /* 
* (non-Javadoc) 
* 
* @see android.app.Activity#onDestroy() 
*/ 

    @Override 
    protected void onStop() { 
     try { 
      System.out.println("Killing ServerSocket"); 
      bss.close(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     super.onStop(); 
    } 
} 

回答

0

很长一段时间后的更新位 - 事实证明,蓝牙需要UUID采取“0000xxxx00001000800000805f9b34fb”的形式,这样做的问题是为什么不使用16位标识符而不是128位UUID,但没关系。

我不知道是否BlueCove可与本我的笔记本电脑,但我最近在我的笔记本电脑与Linux和“配合bluez”实验表明,形式作品的任何UUID。 Android可能应该在他们的文档中包含该内容作为某种类型的注释。

0

这是一个老问题,所以我不知道是否有人仍然在寻找答案,但无论如何,这是一个答案。 .. :)。由于url为空,因此您询问的行将返回null。试试这个UUID,而不是一个在你的代码:0000110100001000800000805f9b34fb

相关问题