在断开投射之前获取媒体当前位置
Get media current position before disconnecting from cast
是否可以在断开与演员表的连接之前从 VideoCastManager
获取当前正在播放的媒体?
我想在用户手动断开投射时保存当前媒体的最后进度。我使用了 VideoCastCosumer
方法 onDisconnected()
但它抛出异常。不确定是哪种异常,因为我的日志只显示了这个:
System.err: at com.economist.newton.mobile.ui.activity.BaseCastActivity.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
有几种方法可以做到这一点。我认为最简单的方法是拥有一个实现 ProgressWatcher
(来自 CCL)的组件。在该侦听器中,将每秒调用 setProgress(int currentPosition, int duration)
并将流的 currentPosition 作为其第一个参数。您可以缓存此值(如果您的设备断开连接,它不会更新)以便为您提供有关当前位置的实时信息。例如,如果您的 activity 实现了这个接口:
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()
中调用它)来获取 last/current 流位置。请注意,根据您应用的结构,您可以决定 register/unregister 您的 ProgressWatcher
在 onResume()
/onPause()
或 onCreate()
/onDestroy()
中。重要的是确保注销它以避免内存泄漏。
对于 Castv3,您可以从 SessionManagerListener
覆盖 onSessionEnding
并获得 mRemoteMediaClient.getMediaStatus().getStreamPosition()
呼叫 mRemoteMediaClient.getMediaStatus().getStreamPosition()
对我不起作用,但 mRemoteMediaClient.getApproximateStreamPosition()
工作正常。
是否可以在断开与演员表的连接之前从 VideoCastManager
获取当前正在播放的媒体?
我想在用户手动断开投射时保存当前媒体的最后进度。我使用了 VideoCastCosumer
方法 onDisconnected()
但它抛出异常。不确定是哪种异常,因为我的日志只显示了这个:
System.err: at com.economist.newton.mobile.ui.activity.BaseCastActivity.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
有几种方法可以做到这一点。我认为最简单的方法是拥有一个实现 ProgressWatcher
(来自 CCL)的组件。在该侦听器中,将每秒调用 setProgress(int currentPosition, int duration)
并将流的 currentPosition 作为其第一个参数。您可以缓存此值(如果您的设备断开连接,它不会更新)以便为您提供有关当前位置的实时信息。例如,如果您的 activity 实现了这个接口:
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()
中调用它)来获取 last/current 流位置。请注意,根据您应用的结构,您可以决定 register/unregister 您的 ProgressWatcher
在 onResume()
/onPause()
或 onCreate()
/onDestroy()
中。重要的是确保注销它以避免内存泄漏。
对于 Castv3,您可以从 SessionManagerListener
覆盖 onSessionEnding
并获得 mRemoteMediaClient.getMediaStatus().getStreamPosition()
呼叫 mRemoteMediaClient.getMediaStatus().getStreamPosition()
对我不起作用,但 mRemoteMediaClient.getApproximateStreamPosition()
工作正常。