Android AllJoyn:与第二台机器的连接会出现总线连接错误



我已经为两种不同的传感器开发了应用程序。它们单独工作正常,但是当我尝试使用它们来收集和创建两个不同的总线时,Alljoyn 给出了这个例外。

org.alljoyn.services.common.BusAlreadyExistException:对象具有 之前使用总线附件设置。

以下是我的连接源代码。 谁能告诉我为什么我有这个问题。

private void connect() 
        {           org.alljoyn.bus.alljoyn.DaemonInit.PrepareDaemon(getApplicationContext());
            bus = new BusAttachment("ControlPanelBrowser", BusAttachment.RemoteMessage.Receive);
            bus.registerBusListener(new BusListener());

            Status status = bus.registerBusObject(mControlPanelSignalInterface, Constants.SERVICE_PATH);

            if (status != Status.OK) {
                Log.d(TAG, "Problem while registering bus object");
            }   
            SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
            srpPassword = settings.getString(PREFS_PASSWORD, DEFAULT_SECURED_SRP_PASSWORD);
            SrpAnonymousKeyListener authListener = new SrpAnonymousKeyListener(this, logger, AUTH_MECHANISMS);
            Status authStatus = bus.registerAuthListener(authListener.getAuthMechanismsAsString(), 
                    authListener, getKeyStoreFileName());
            if ( authStatus != Status.OK ) {
                Log.e(TAG, "Failed to register AuthListener");
            }
            status = bus.connect();

            if (Status.OK == status){
                String daemonName = Constants.DAEMON_NAME_PREFIX + ".ControlPanelBrowser.G" + 
                        bus.getGlobalGUIDString();
                int flag = BusAttachment.ALLJOYN_REQUESTNAME_FLAG_DO_NOT_QUEUE;
                Status reqStatus = bus.requestName(daemonName, flag);
                if (reqStatus == Status.OK) {
                    Status adStatus = bus.advertiseName(Constants.DAEMON_QUIET_PREFIX +
                            daemonName, SessionOpts.TRANSPORT_ANY);
                    if (adStatus != Status.OK){
                        bus.releaseName(daemonName);
                        Log.e(TAG, "Failed to advertise daemon name: '" + daemonName + "', Error: '" + status + "'");
                    }
                    else{
                        Log.d(TAG, "Succefully advertised daemon name: '" + daemonName + "'");
                    }
                }
                else {
                    Log.e(TAG, "Failed to request daemon name: '" + daemonName + "', Error: '" + status + "'");
                }
            }

            status = bus.registerSignalHandlers(mControlPanelSignalInterface);
            if (status != Status.OK) {
                Log.d(TAG, "Problem while registering signal handlers");
            }
            // Initialize AboutService
            aboutClient = AboutServiceImpl.getInstance();
            aboutClient.setLogger(logger);
            try {
                aboutClient.startAboutClient(bus);
                for (String iface :  ANNOUNCE_IFACES) {

                    aboutClient.addAnnouncementHandler(this, new String[] {iface});
                }
            } catch (Exception e) {
                logger.error(TAG, "Unable to start AboutService, Error: " + e.getMessage());
            }

        }

使用registerBusObject twince,然后你可以制作一个标志巴士附件

为什么不创建两个接口,一个接口分别用于一个传感器。 然后将这两个接口添加到实现这两个接口和总线对象的类中,并将此类的嵌入注册为 BusObject。

例如

Sensor1_interface.java and Sensor2_interface.java //are my two interface classes

创建一个新的类Sensor_InterfaceList,用于安装两个接口和 BusObject

class Sensor_InterfaceList implements Sensor1_interface,Sensor2_interface,BusObject
   {
    // implment your interfaces here
    .....
    }
private Sensor_InterfaceList mySensor_InterfaceList;
mySensor_InterfaceList = new Sensor_InterfaceList();
myBus.registerBusObject(mySensor_InterfaceList,"/your/path");

这应该可以解决您的问题:)

最新更新