簡體   English   中英

藍牙,BlueCove和Raspberry PI

[英]Bluetooth, BlueCove and Raspberry PI

我在RaspberryPI上使用Java使用BlueJ進行設置,並使用Blueman進行了藍牙設置,並且正在使用BlueCove API。

我從以下示例中獲取了RemoteDeviceDiscovery示例:

http://bluecove.org/bluecove/apidocs/overview-summary.html#DeviceDiscovery

當我從BlueJ中運行示例時,我得到:

“等待設備查詢完成...設備查詢完成!找到0個設備”,當我從終端窗口運行時,使用:

pi @ raspberrypi〜/ java / bluetooth_jar $ / usr / lib / jvm / jdk-8-oracle-arm-vfp-hflt / jre / bin / java -jar bluetooth_jar.jar

我得到:

“ bluez上的BlueCove版本2.1.1-SNAPSHOT BluetoothStateException異常:javax.bluetooth.BluetoothStateException:藍牙設備未准備好。[1]不允許操作BlueCove堆棧關閉已完成”

為什么在使用BlueJ時未引發異常,我不明白,但是在命令行中,由於設備未准備好,它似乎無法檢測附近的設備。 但是,我不明白此錯誤消息,因為我可以使用Blueman Manager將文件發送到附近的Android平板電腦和Win7筆記本電腦。

import java.io.IOException;

導入java.util.ArrayList; 導入javax.bluetooth。*;

/ ** *最小設備發現示例。 * /公共類RemoteDeviceDiscovery {

protected ArrayList<RemoteDevice> devicesDiscovered = new ArrayList();
protected final Object inquiryCompletedEvent = new Object();

public RemoteDeviceDiscovery()
{
    DiscoveryListener listener = new MyDiscoveryListener();

    synchronized(inquiryCompletedEvent) {
        try
        {
            LocalDevice local = LocalDevice.getLocalDevice();
            local.setDiscoverable(DiscoveryAgent.GIAC);
            DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();
            // note: GIAC: The inquiry access code for General/Unlimited Inquiry Access Code (GIAC).
            boolean startedInquiry = discoveryAgent.startInquiry(DiscoveryAgent.GIAC, listener);
            if (startedInquiry)
            {
                System.out.println("wait for device inquiry to complete...");
                inquiryCompletedEvent.wait();
                System.out.println(devicesDiscovered.size() +  " device(s) found");
            }
        }
        catch ( BluetoothStateException e)
        {
            System.out.println("BluetoothStateException exception: " + e);
        }
        catch (InterruptedException e)
        {
            System.out.println("InterruptedException exception: " + e);
        }
    }        
}

public static void main(String[] args)
{

    RemoteDeviceDiscovery rmd = new RemoteDeviceDiscovery();
}

class MyDiscoveryListener implements DiscoveryListener
{
    public MyDiscoveryListener()
    {
    }

    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
        System.out.println("Device " + btDevice.getBluetoothAddress() + " found");
        devicesDiscovered.add(btDevice);
        try {
            System.out.println("     name " + btDevice.getFriendlyName(false));
        } catch (IOException cantGetDeviceName) {
        }
    }

    public void inquiryCompleted(int discType) {
        System.out.println("Device Inquiry completed!");
        synchronized(inquiryCompletedEvent){
            inquiryCompletedEvent.notifyAll();
        }
    }

    public void serviceSearchCompleted(int transID, int respCode) {
    }

    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
    }    
} // class MyDiscoveryListener

} //類RemoteDeviceDiscovery

發現如果我以超級用戶權限運行jar,則可以按預期工作:

pi @ raspberrypi〜sudo / java / bluetooth_jar $ / usr / lib / jvm / jdk-8-oracle-arm-vfp-hflt / jre / bin / java -jar bluetooth_jar.jar

輸出:

bluez上的BlueCove版本2.1.1-SNAPSHOT等待設備查詢完成...設備C4850852975B發現名稱GMSEED-PC設備查詢已完成! 找到1個設備BlueCove堆棧關閉已完成

如果我以超級用戶身份從命令行而不是通過桌面菜單項Menu | Programming | BlueJ啟動BlueJ; 即:

pi @ raspberrypi〜$須藤bluej

然后示例應用程序將提供相同的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM