AllJoyn中的BUS_BLOCKING_CALL_NOT_ALLOWED错误

unc*_*Lem 4 android p2p alljoyn

我正在尝试将AllJoyn用于我的应用程序,但是当我尝试使用示例中的代码(示例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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

这段代码来自样本,我不知道它有什么问题.你能帮助我吗?

如有必要,请参阅完整代码:http://pastebin.com/f1sD7RtK

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

我也非常感谢任何好的建议或样品.

mdu*_*b85 5

bus.enableConcurrentCallbacks()在调用bus.joinSession(...)foundAdvertisedName方法之前尝试调用.
这将允许AllJoyn分派额外的回调,而当前的findAdvertisedName仍在执行.这是一个文档链接,用于解释正在发生的事情.

  • 看起来您正在两次注册一个BusListener,一次在第13行,在您的完整代码发布中再次注册第83行.因此,foundAdvertisedName回调被触发两次,第二次导致ALLJOYN_JOINSESSION_REPLY_ALREADY_JOINED,因为您已经第一次加入会话.删除第二个总线侦听器应该可以解决问题. (2认同)