【问题标题】:BUS_BLOCKING_CALL_NOT_ALLOWED error in AllJoynAllJoyn 中的 BUS_BLOCKING_CALL_NOT_ALLOWED 错误
【发布时间】:2012-11-13 11:00:03
【问题描述】:

我正在尝试将 AllJoyn 用于我的应用程序,但是当我尝试使用示例 (sample 13) 中的代码时,我无法加入会话并收到错误 BUS_BLOCKING_CALL_NOT_ALLOWED。

    bus.registerBusListener(new BusListener() {
        @Override
        public void foundAdvertisedName(String name,
                                        short transport,
                                        String namePrefix) {
            short contactPort = CONTACT_PORT;
            SessionOpts sessionOpts = new SessionOpts();
            Mutable.IntegerValue sessionId = new Mutable.IntegerValue();

            Status status = bus.joinSession("com.my.well.known.name", //here's error: status = BUS_BLOCKING_CALL_NOT_ALLOWED 
                    contactPort,
                    sessionId,
                    sessionOpts,
                    new SessionListener());
            bus.cancelAdvertiseName("com.my.well.known.name",SessionOpts.TRANSPORT_ANY);
        }
    });

此代码来自示例,我不知道它有什么问题。你能帮帮我吗?

如果需要,这里是完整代码:http://pastebin.com/f1sD7RtK

我正在尝试创建新频道并自动连接到该频道,无需用户参与。

此外,我将非常感谢任何好的建议或样品。

【问题讨论】:

    标签: android p2p alljoyn


    【解决方案1】:

    在foundAdvertisedName 方法中调用bus.joinSession(...) 之前尝试调用bus.enableConcurrentCallbacks()
    这将允许 AllJoyn 在当前回调 foundAdvertisedName 仍在执行时分派一个额外的回调。 这是一个link to the documentation,它解释了正在发生的事情。

    【讨论】:

    • 现在我得到了 ALLJOYN_JOINSESSION_REPLY_ALREADY_JOINED
    • 看起来您注册了两次 BusListener,一次在第 13 行,一次在完整代码发布的第 83 行。结果,foundAdvertisedName 回调被触发了两次,第二次导致 ALLJOYN_JOINSESSION_REPLY_ALREADY_JOINED,因为您第一次已经加入了会话。删除第二个总线监听器应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多