2014-03-05 18 views
0

我試圖將Chromecast集成到我們的應用中,並且遇到了在加入已運行的應用時從接收者獲取數據的問題。如何從接收者獲取自定義數據

當第一次啓動該應用程序使用我

public class CastMessageStream extends RemoteMediaPlayer {  
    public void setMetadata(GoogleApiClient apiClient, CastingObject castingObject, String seriesId, String description, String episodeNumber, String title) { 
     JSONObject payload = _initJsonObject(COMMAND_KEY_SET_METADATA); 
     try { 
      payload.put(KEY_SUB_TITLE, castingObject.castingSubUrl); 
      payload.put(KEY_TITLE, title); 
      payload.put(KEY_SERIES_ID, seriesId); 
      payload.put(KEY_EPISODE_NUMBER, episodeNumber); 
      payload.put(KEY_DESCRIPTION, description); 
      payload.put(KEY_VIDEO_HEADER, castingObject.description); 
      sendMessage(apiClient, payload.toString()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* Send messages to the reciever using the NAMESPACE 
*/ 
private final void sendMessage(GoogleApiClient apiClient, String message) 
     throws IOException, IllegalArgumentException, IllegalStateException { 
    Cast.CastApi.sendMessage(apiClient, NAMESPACE, message); 
} 

代碼加入應用已經在運行

Cast.CastApi.launchApplication(googleApiClient, APP_ID).setResultCallback(new ResultCallback<Cast.ApplicationConnectionResult>() { 
     @Override 
     public void onResult(Cast.ApplicationConnectionResult applicationConnectionResult) { 
      mMessageStream = new CastMessageStream(); 
      MediaInfo mediaInfo = mMessageStream.getMediaInfo(); 
      MediaStatus mediaStatus = mMessageStream.getMediaStatus(); 
      JSONObject jsonObject = mediaInfo.getCustomData(); // Returns null 
      MediaMetadata metadata = mediaInfo.getMetadata(); // Returns null 
      .... 
     } 
    }); 

我要如何從接收自定義信息集的元日期與RemoteMediaPlayer。我有它在iOS上工作,所以我知道它可能。任何幫助,非常感謝

+0

什麼是mMessageStream? (順便說一句,你可能想要將代碼包裝在你的onResult()中的條件語句中,只有當applicationConnectionResult.getStatus()。isSuccess()爲true時才能執行) –

+0

@AliNaddaf我把它包裝起來,但爲了簡單起見,在問題中拿出來。我編輯了這個問題,mMessageStream是一個CastMessageStream,它擴展了RemoteMediaPlayer – Darussian

回答

2

在我看來,你正在擴大RemoteMediaPlayer的功能和覆蓋其sendMessage()。實際上不建議您考慮您的任務;如果您想要使用媒體發送其他數據,則需要使用例如各種呼叫和對象中可用的customData字段。例如,MediaInfo對象可以有customData,您可以在其中添加這些附加字段,因此可以使用多個控制命令,如load(), play(), pause(),....如果您選擇覆蓋RemoteMediaPlayer的sendMessage(),則需要處理接收器上的其他功能方面也是如此。

+0

Ali對於混淆抱歉。 RemoteMediaPlayer沒有sendMessage方法。我自己的方法,我剛剛更新了問題。我使用Cast.CastApi.sendMessage(..)發送自定義消息。我錯誤地認爲接收方應該能夠將接收方發送的自定義數據發送給我,而無需在接收方進行任何額外的實施? – Darussian

+0

看起來你使用的是自定義名稱空間(我不知道你的代碼中有什麼NAMESPACE,但我猜測這是一個自定義值)。如果是這樣,您可以自己在接收機上做你想做的事情(例如,當你得到這些信息時,將它廣播給所有連接的發送器)。自定義命名空間可以讓你定義它們的含義,併爲你提供一種溝通的方式,框架只是發送消息,需要完成的任務取決於你。爲什麼不使用我建議的customData(定義在MediaInfo上)?如果你使用它,那麼框架可以爲你處理剩下的事情。 –

+0

感謝您的幫助! – Darussian

相關問題