2014-03-26 4 views
2

Я пытаюсь создать простое приложение, которое транслирует видео на Chromecast, используя библиотеку Cast Castanion.Состояние медиафайла RemoteMediaPlayer равно null с библиотекой сопутствующих лиц

То, что я делаю, довольно просто. У меня есть деятельность со следующим кодом:

private VideoCastManager mVideoCastManager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     mVideoCastManager = CastHelper.getVideoCastManager(this); 
    } 

и класс под названием CastHelper с одним методом:

private static final String APPLICATION_ID = CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID; 
    private static VideoCastManager mCastMgr; 

    public static VideoCastManager getVideoCastManager(Context ctx) 
    { 
     if (mCastMgr == null) 
     { 
      mCastMgr = VideoCastManager.initialize(ctx, APPLICATION_ID, null, null); 
      mCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION 
        | VideoCastManager.FEATURE_DEBUGGING); 
     } 
     mCastMgr.setContext(ctx); 
     return mCastMgr; 
    } 

Когда я запустить приложение, у меня есть кнопки медиа в ActionBar, и Я могу выбрать устройство. Тем не менее, у меня есть ошибка:

03-26 19:18:47.890: D/ccl_VideoCastManager(9874): Registering MediaChannel namespace 
03-26 19:18:47.900: D/ccl_VideoCastManager(9874): onApplicationStatusChanged() reached: Ready To Cast 
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): RemoteMediaPlayer::onStatusUpdated() is reached 
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): onRemoteMediaPlayerStatusUpdated() reached 
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): mApiClient or mRemoteMediaPlayer is null, so will not proceed 

На самом деле проблема заключается в том блоке:

if (null == mApiClient || null == mRemoteMediaPlayer || 
       null == mRemoteMediaPlayer.getMediaStatus()) { 
      LOGD(TAG, "mApiClient or mRemoteMediaPlayer is null, so will not proceed"); 
      return; 
} 

Экземпляр RemoteMediaPlayer это хорошо, но метод getMediaStatus возвращает нуль. Заметьте, что я даже не загружаю носители.

Что я делаю неправильно?

EDIT Как отметил Али Naddaf, может быть, этот код не имеет ничего плохого, но когда я добавляю VideoCastConsumerImplonApplicationConnected никогда не вызывается, поэтому я думал, что это может быть причиной.

IVideoCastConsumer mCastConsumer = new VideoCastConsumerImpl() 
     { 


      @Override 
      public void onConnected() 
      { 
       super.onConnected(); 


      } 

      @Override 
      public void onApplicationConnected(ApplicationMetadata appMetadata, String sessionId, boolean wasLaunched) 
      { 
       super.onApplicationConnected(appMetadata, sessionId, wasLaunched); 
       //Trying to load a media here, but never called 

      } 

     }; 
mVideoCastManager.addBaseCastConsumer(mCastConsumer); 

ответ

1

Изменить mVideoCastManager.addBaseCastConsumer(mCastConsumer); на mVideoCastManager.addVideoCastConsumer(mCastConsumer); и посмотреть, поможет ли это.

+0

В этом была проблема. Он работает сейчас. Благодаря! – Aerilys

1

Почему вы считаете, что что-то не так? Если вы еще не загрузили какой-либо носитель, значит, состояние мультимедиа разумно равным нулю, а метод, который использует вышеупомянутый путь эвакуации, - это все о обновлении состояния носителя для разных вещей, и в этот момент он выходит из этого метода, поскольку практически нечего делать. Так вы видите проблему с этим, или, может быть, я неправильно понял вопрос?

+0

Вы правы, возможно, здесь нет ничего плохого, но затем, когда я добавляю обратный вызов VideoCastConsumerImpl, метод onApplicationConnected никогда не вызывается. Я уточню свой вопрос, чтобы объяснить более точно. – Aerilys