首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓝牙、BlueCove和树莓派

蓝牙、BlueCove和树莓派
EN

Stack Overflow用户
提问于 2015-09-11 18:36:59
回答 1查看 2.1K关注 0票数 1

我在我的RaspberryPI上使用BlueJ设置Java,使用Blueman设置蓝牙,并使用BlueCove应用编程接口。

我将示例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将文件发送到附近的安卓平板电脑和Win7笔记本电脑。

代码语言:javascript
复制
import java.io.IOException;

导入java.util.ArrayList;导入javax.Bluetooth。*;

/** *最小设备发现示例。*/公共类RemoteDeviceDiscovery {

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2015-09-11 20:58:06

我发现如果我用超级用户权限运行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上的快照等待设备查询完成...Device C4850852975B found name BlueCove -PC设备查询完成!1个设备发现GMSEED堆栈关闭完成

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

pi@raspberrypi ~$ sudo bluej

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32521436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档