2016-08-11 3 views
0

キャストを切断する前に現在の再生メディアをVideoCastManagerから取得することはできますか?キャストを切断する前にメディアの現在の位置を取得する

ユーザーが手動でキャストを切断したときに、現在のメディアの最終進捗を保存します。 VideoCastCosumerメソッドonDisconnected()を使用しましたが、例外がスローされます。

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

この行はonDisconnected()メソッド内に次の行が含まれています:私のログはこれだけを示しているため、例外の種類がわからない

任意のヘルプは、 castManager変数は onCreate()で宣言されている場合
try { 
     if(castManager.getCurrentMediaPosition() > 30000){ // <-here error occurs 
       ... 
     } 
} catch (TransientNetworkDisconnectionException | NoConnectionException e) { 
     e.printStackTrace(); 
} 

castManager = VideoCastManager.getInstance(); 

キャストコンパニオンライブラリ:com.google.android.libraries.cast.companionlibrary:ccl:2.8.4

答えて

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()でそれを呼び出すことができます)を呼び出すことができます。アプリの構造によってはProgressWatcheronResume()/onPause()またはonCreate()/onDestroy()に登録/登録解除することができます。重要なことは、メモリのリークを避けるために登録を解除することです。

+0

を得ることができます(CCLライブラリなしを?) –

0

Castv3について、あなたはSessionManagerListenerからonSessionEndingをオーバーライドして、GoogleのキャストV3と同じ達成するための最も簡単な方法は何かmRemoteMediaClient.getMediaStatus().getStreamPosition()

関連する問題