2014-03-05 2 views
0

Chromecast를 앱에 통합하려고하는데 이미 실행중인 애플리케이션에 참여할 때 수신기에서 데이터를 가져 오는 문제가 발생합니다. 먼저 응용 프로그램을 실행할 때수신자에게서 맞춤 데이터를 가져 오는 방법

는 내가 이미 실행중인 응용 프로그램 내가 수신기로부터 사용자 정보를 어떻게

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 
      .... 
     } 
    }); 

시청에

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

코드를 사용하여 RemoteMediaPlayer와 메타 날짜를 설정합니다. iOS에서 작동하도록했습니다. 그래서 가능한 것으로 알고 있습니다. 어떤 도움이라도 대단히 감사합니다.

+0

mMessageStream이란 무엇입니까? (btw, applicationConnectionResult.getStatus(). isSuccess()가 true 인 경우에만 실행되도록 조건문에서 onResult() 내부에 코드를 래핑하려고 할 수 있습니다. –

+0

@AliNaddaf 포장했으나 단순화하기 위해 질문에서 그것을 꺼냈다. 나는 질문을 편집했다. mMessageStream은 RemoteMediaPlayer를 확장 한 CastMessageStream이다. – Darussian

답변

2

RemoteMediaPlayer의 기능을 확장하고 해당 sendMessage()을 재정의하는 것처럼 보입니다. 그것은 실제로 당신이 염두에두고있는 작업에 권장되지 않습니다; 미디어로 추가 데이터를 보내려면 다양한 통화 및 개체에서 사용할 수있는 customData 필드를 사용해야합니다. 예를 들어, MediaInfo 오브젝트는 customData 일 수 있으며 추가 필드를 추가 할 수 있으므로 load(), play(), pause()과 같은 제어 명령을 사용할 수 있습니다. RemoteMediaPlayer의 sendMessage()을 덮어 쓰려면 수신자의 추가 기능을 처리해야합니다 측면뿐만 아니라.

+0

알리가 혼란 스럽다. RemoteMediaPlayer에는 sendMessage 메소드가 없습니다. 방금 질문을 업데이트 한 내 자신의 방법. Cast.CastApi.sendMessage (..)를 사용하여 사용자 지정 메시지를 보냅니다. 수신기가 수신기 측에서 추가 구현없이 전송 된 사용자 지정 데이터를 다시 보낼 수 있어야한다고 생각하는데 잘못 되었습니까? – Darussian

+0

사용자 정의 네임 스페이스를 사용하고있는 것처럼 보입니다. (코드에 NAMESPACE이 무엇인지는 모르지만 사용자 지정 값이라고 생각합니다.) 그렇다면 수신자가 원하는대로 할 수 있습니다 (예 : 수신자가 연결된 모든 발신자에게 브로드 캐스트 함). 사용자 정의 네임 스페이스는 사용자가 의미하는 것을 정의하고 사용자가 의사 소통 할 수있는 방법을 제공하며, 프레임 워크는 메시지를 보냅니다. 사용자 지정 네임 스페이스는 사용자가 결정해야합니다. 내가 제안한 customData를 사용하지 않는 이유는 무엇입니까 (MediaInfo에 정의되어 있습니다)? 이것을 사용하면 프레임 워크가 나머지를 처리 ​​할 수 ​​있습니다. –

+0

도움을 주셔서 감사합니다! – Darussian

관련 문제