2016-02-25 7 views
12

2種類のセンサーのアプリケーションを開発しました。彼らは別々にうまく働いていますが、私はそれらを使用して、Alljoynが2つの異なるバスを作成しようとすると、この例外が発生します。Android AllJoyn:2台目のマシンとの接続でBusAttachementのエラーが発生する

org.alljoyn.services.com.BusAlreadyExistException:オブジェクトには、以前にBusAttachmentで が設定されています。

以下は私の接続用ソースコードです。なぜ誰かがこの問題を抱えているのか教えてもらえますか?

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()); 

      } 


     } 
+0

を解決する必要がありますが、 'registerBusObjectを呼び出す必要があります'を2回(各センサーに1回)、単一のバスアタッチメントを1つだけ作成する – Lino

+0

私はこのbu成功しない。今私は2つの異なるクラスの2つの異なるbusAttachmentオブジェクトを作成していますが、同じエラーが発生しています。どうすればこの問題を解決できますか? –

+0

これは 'BusAlreadyExistException'をスローする行ですか? – Lino

答えて

1

使用registerBusObject twince、その後、あなたが作ることができる1 ACシングルバス添付

+0

私はこれをしましたが、同じエラーが発生しました。 –

0

なぜ2つのインターフェイス、それぞれ一つのセンサのための1つのインターフェイスを作成していけません。これらの2つのインタフェースをこれらの2つのインタフェースとbusObjectを実装するクラスに追加し、このクラスの実装をBusObjectとして登録します。例えば

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

二つのインターフェースをinplements新しいクラス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"); 

これはあなたの問題:)

+0

または同じバス上にある異なるパスに2つのオブジェクトを追加することもできます。例 'myBus.registerBusObject(mySensor1、"/my/path1 "); myBus.registerBusObject(mySensor2、 "/ my/path2"); ' –

関連する問題