0

VideoCastManager是否可以在与演员断开连接之前获取当前正在播放的媒体?

当用户手动断开与演员的连接时,我想保存当前媒体的最后进度。我使用了VideoCastCosumer方法onDisconnected(),但它引发了异常。不知道是什么样的异常,因为我的日志只显示:

System.err: at com.economist.newton.mobile.ui.activity.BaseCastActivity$1.onDisconnected (MyCastActivity.java:81)

此行在onDisconnected()方法内包含以下行:

try {
      if(castManager.getCurrentMediaPosition() > 30000){ //  <-here error occurs
              ...
      }
} catch (TransientNetworkDisconnectionException | NoConnectionException e) {
      e.printStackTrace();
}

如果有任何帮助,castManager变量声明在onCreate()

castManager = VideoCastManager.getInstance();

演员配套库:com.google.android.libraries.cast.companionlibrary:ccl:2.8.4

4

3 回答 3

1

有几种方法可以做到这一点。我认为最简单的方法是拥有一个实现ProgressWatcher(来自 CCL)的组件。在该侦听器中,setProgress(int currentPosition, int duration)将每秒调用一次,并将流的 currentPosition 作为其第一个参数。您可以缓存此值(如果您的设备断开连接,它将不会更新),以便为您提供有关当前位置的实时信息。例如,如果你的活动实现了这个接口:

public MyActivity extends AppCompatActivity implements ProgressWatcher {
   private int mCurrentStreamPosition;

   public onStart() {
       ....
       mCastManager.addProgressWatcher(this);
       ....
   }

   public onStop() {
       ....
       mCastManager.removeProgressWatcher(this);
       ....
   }

   public setProgress(int currentTime, int duration) {
       mCurrentStreamPosition = currentTime;
   }

   public int getCurrentStreamPosition() {
       return mCurrentStreamPosition;
   }
   ....
}

因此,无论何时,您都可以调用 getCurrentStreamPosition() (例如,您可以在 中调用它onDisconnected())来获取最后/当前流位置。请注意,根据您的应用程序的结构,您可能决定注册/注销您的ProgressWatcherin onResume()/onPause()onCreate()/ onDestroy()。重要的是确保您取消注册它以避免内存泄漏。

于 2016-08-12T07:03:15.033 回答
1

对于 Castv3,您可以覆盖并onSessionEnding获取SessionManagerListenermRemoteMediaClient.getMediaStatus().getStreamPosition()

于 2018-03-05T12:38:20.397 回答
0

打电话mRemoteMediaClient.getMediaStatus().getStreamPosition()对我不起作用,但mRemoteMediaClient.getApproximateStreamPosition()效果很好。

于 2019-05-24T22:10:45.447 回答