2015-11-05 60 views
1

我正在通過Android的Google Cast發件人應用程序教程工作,當涉及到Cast的連接時,我卡住了CustomReceiverGoogle Cast Android發件人:ResultCallback不叫

我用下面的ConnectionCallbacks實現:

private class ConnectionCallbacks implements GoogleApiClient.ConnectionCallbacks { 
    @Override 
    public void onConnected(Bundle bundle) { 
     Log.i(TAG, "ConnectionCallbacks.onConnected"); 

     LaunchOptions options = new LaunchOptions.Builder() 
       .setRelaunchIfRunning(false) 
       .build(); 
     Cast.CastApi 
       .launchApplication(mApiClient, getString(R.string.google_cast_key), options) 
       .setResultCallback(new ResultCallback<Cast.ApplicationConnectionResult>() { 
        @Override 
        public void onResult(Cast.ApplicationConnectionResult result) { 
         Status status = result.getStatus(); 
         if (status.isSuccess()) { 
          Log.i(TAG, "Success!!! " + result.getApplicationStatus()); 
         } else { 
          Log.e(TAG, "No success!!! " + result.getApplicationStatus()); 
         } 
        } 
       }); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Log.i(TAG, "ConnectionCallbacks.onConnectionSuspended: " + i); 
    } 
} 

而且CustomReceiver代碼:

<script> 

    window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance(); 

    var appConfig = new cast.receiver.CastReceiverManager.Config(); 

    appConfig.statusText = 'Ready to play'; 

    // 100 minutes for testing, use default 10sec in prod by not setting this value 
    appConfig.maxInactivity = 6000; 

    window.castReceiverManager.start(); 
    console.log('Starting Receiver Manager'); 
    document.getElementById("message").innerHTML='Starting Receiver Manager'; 
</script> 

當我選擇從對話框我的Chromecast,我的自定義接收器應用程序是在Chromecast和推出應用日誌

11-05 22:38:00.470: I/MainActivity(8955): ConnectionCallbacks.onConnected 

但是,它從來沒有打電話ResultCallbackonResultonConnectionSuspended,或ConnectionFailedListener。我錯過了什麼?

添加日誌文件

[ 0.340s] [cast.receiver.CastReceiverManager] Dispatching CastReceiverManager system ready event 
desorona_cast_receiver.html:45 Received Ready event: {"id":"E9198EB3","name":"DESORONA","sessionId":"93EB8C53-4589-4D49-B578-E46D289B57F9","namespaces":[],"launchingSenderId":"40:com.example.test-145"} 
cast_receiver.js:40 [ 0.353s] [cast.receiver.IpcChannel] IPC message sent: {"namespace":"urn:x-cast:com.google.cast.system","senderId":"SystemSender","data":"{\"type\":\"setappstate\",\"statusText\":\"Application status is ready...\"}"} 
cast_receiver.js:40 [ 0.373s] [cast.receiver.IpcChannel] Received message: {"data":"{\"level\":1.0,\"muted\":false,\"type\":\"volumechanged\"}","namespace":"urn:x-cast:com.google.cast.system","senderId":"SystemSender"} 
cast_receiver.js:40 [ 0.375s] [cast.receiver.CastMessageBus] Dispatching CastMessageBus message 
cast_receiver.js:40 [ 0.378s] [cast.receiver.CastReceiverManager] Dispatching system volume changed event [1, false] 
cast_receiver.js:40 [ 0.382s] [cast.receiver.IpcChannel] Received message: {"data":"{\"type\":\"visibilitychanged\",\"visible\":true}","namespace":"urn:x-cast:com.google.cast.system","senderId":"SystemSender"} 
cast_receiver.js:40 [ 0.385s] [cast.receiver.CastMessageBus] Dispatching CastMessageBus message 
cast_receiver.js:40 [ 0.388s] [cast.receiver.CastReceiverManager] Dispatching visibility changed event true 
cast_receiver.js:40 [ 0.392s] [cast.receiver.IpcChannel] Received message: {"data":"{\"standby\":false,\"type\":\"standbychanged\"}","namespace":"urn:x-cast:com.google.cast.system","senderId":"SystemSender"} 
cast_receiver.js:40 [ 0.393s] [cast.receiver.CastMessageBus] Dispatching CastMessageBus message 
cast_receiver.js:40 [ 0.395s] [cast.receiver.CastReceiverManager] Dispatching standby changed event false 
+0

這是哪個教程?你能提供一個鏈接嗎? –

+0

它與Google文本示例應用程序組合在一起的Google教程:https://developers.google.com/cast/docs/custom_receiver –

回答

3

我解決我的問題。這不是發送者,而是接收者。 Google沒有說明,使用CustomReceivers時需要註冊MessageBus。最小ReceiverCode獲得連接到接收機發送者必須是:

var namespace = 'urn:x-cast:com.denis_loh.desorona' 

    window.onload = function() { 
    cast.receiver.logger.setLevelValue(0); 
    window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();  

    // Erstelle MessageBus zum Austauschen von Daten 
    window.messageBus = window.castReceiverManager.getCastMessageBus(namespace); 

    // Lege onMessage-Callback für den MessageBus fest. 
    window.messageBus.onMessage = onMessage; 

    // Starte den Receiver. 
    window.castReceiverManager.start({statusText: "Application is starting"}); 
    console.log('Receiver Manager started'); 
    }; 

    function onMessage(event) { 
    window.messageBus.send(event.senderId, event.data); 
    } 

不過,我還不知道,爲什麼這是必需的畢竟。