【问题标题】:Bluetooth, BlueCove and Raspberry PI蓝牙、BlueCove 和 Raspberry PI
【发布时间】:2015-09-11 10:36:58
【问题描述】:

我在我的 RaspberryPI 上使用 BlueJ 使用 Java 和使用 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

我明白了:

" BlueCove 版本 2.1.1-bluez 上的快照 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

【问题讨论】:

    标签: java bluetooth raspberry-pi2


    【解决方案1】:

    发现如果我以超级用户权限运行 jar,那么它会按预期工作:

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

    带输出:

    BlueCove 版本 2.1.1-bluez 上的快照 等待设备查询完成... 找到设备 C4850852975B 名称 GMSEED-PC 设备查询完成! 找到 1 个设备 BlueCove 堆栈关闭完成

    如果我从命令行而不是通过桌面菜单项 Menu|Programming|BlueJ 以超级用户身份启动 BlueJ;即:

    pi@raspberrypi ~ $ sudo bluej

    然后示例应用程序给出相同的输出。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2020-12-27
      • 2014-02-13
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2015-10-06
      相关资源
      最近更新 更多