2017-04-10 41 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 
    } 
} 
以下