2012-06-29 13 views
8

私は簡単なアプリケーションを使ってBluetoothを使う基本を学びたいと思っています。また、ラップトップアプリケーションが好きなので、Bluetooth通信を簡単にデバッグできます。以下のコードは、ラップトップがクライアント(BlueCove 2.1.0を使用)で、タブレットがサーバー(Android 2.2)であるという私の試みです。Bluetoothを搭載した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
Bluetoothデバイス:
1. 2013E061D922(ギャラクシータブ)
2. 00242BFE7375(WS1190 )
btspp:// 2013E061D922:20;偽=認証、偽=暗号化、スレッド内のマスタ=偽---- =ヌル
例外MainClass.main(MainClassの "メイン" java.lang.NullPointerExceptionが
。 java:104)
BlueCoveスタックのシャットダウンが

そして、ここを完了私が使用しているコードです:

ノートPCコード:

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

ビットは - Bluetoothはちょうど16ビットの識別子ではなく、128ビットのUUIDを使用しない理由の論点先取ますが、気にしないんフォーム「0000xxxx00001000800000805f9b34fb」を、取るためにUUIDのを必要とし、判明しました。

私のラップトップでこれとBlueCoveが動作するかどうかはわかりませんが、Linuxでのラップトップでの最近の実験や「Bluez」では、そのフォームのUUIDが示唆されています。おそらくアンドロイドはドキュメントにそれをある種のメモとして含めるべきです。

0

これは古いですが質問、誰かがまだ答えを探しているかどうかはわかりませんが、とにかくそれがあります。 .. :)。 urlがnullなので、あなたが質問した行はnullを返しています。コードの代わりにこのUUIDを試してください:0000110100001000800000805f9b34fb久しぶりの更新の

関連する問題