2017-04-10 68 views
0

我正在開發一個與Cast接收器應用程序進行通信的Android應用程序。演員自定義頻道回調從未調用

連接到應用程序的作品(我可以看到應用程序出現在電視上),但我很難讓自定義通道工作。

在我的活動的onCreate我得到CastContext並添加我的SessionManagerLister。

mCastContext = CastContext.getSharedInstance(this); 
mCastContext.getSessionManager().addSessionManagerListener(getSessionManagerListener(), CastSession.class); 

getSessionManagerListener()返回這裏註冊我MessageReceivedCallback監聽器:

private SessionManagerListener<CastSession> getSessionManagerListener() 
{ 
    return new SessionManagerListener<CastSession>() 
    { 
     @Override 
     public void onSessionStarted(CastSession castSession, String s) 
     { 
      try 
      { 
       castSession.setMessageReceivedCallbacks("urn:x-cast:be.myappname.player.cast.v1", new Cast.MessageReceivedCallback() 
       { 
        @Override 
        public void onMessageReceived(CastDevice castDevice, String s, String s1) 
        { 
         System.out.println("never reaches this callback"); 
        } 
       }); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

     ... other methods omitted ... 
    } 
} 

當我點擊工具欄鑄按鈕,我可以選擇一個設備,這會觸發onSessionStarted在SessionManagerListener(這也將啓動接收器在電視上的應用程序)。然後我添加MessageReceivedCallback,但它的回調永遠不會被調用。

在Chrome瀏覽器中檢查我的Cast設備確實顯示了我期望收到的數據,但它似乎無法達到我的Android代碼。

cast_receiver.js:67 [667.202s] [cast.receiver.IpcChannel] IPC message 
[667.202s] [cast.receiver.IpcChannel] IPC message sent: {"namespace":"urn:x-cast:be.myappname.player.cast.v1","senderId":"7c442884-74e6-a388-243c-58b4ab3a4527.3471:com.google.sample.cast.refplayer.tutorial-512","data":"{\"type\":\"login request\"}"} 

一位同事正在研究iOS應用程序,並且確實收到回調。

回答

0

嘗試在onSessionStarted

CastContext cc = CastContext.getSharedInstance(this); 
SessionManager sm = cc.getSessionManager(); 
if (sm != null) { 
    CastSession cs = sm.getCurrentCastSession(); 
    if (cs != null) { 
     try { 
      MyCastChannel mcc = new MyCastChannel(); 
      cs.setMessageReceivedCallbacks("urn:x-cast:be.myappname.player.cast.v1",mcc); 
     } 
     catch (IOException e) { 
     } 
    } 
} 

public class MyCastChannel implements Cast.MessageReceivedCallback 
{ 
    @Override 
    public void onMessageReceived(CastDevice castDevice, String namespace, String message) 
    { 
     // do your thing 
    } 
} 
以下