1
A
回答
0
如果你正在尋找代碼示例,您可以檢查googlecast/CastVideos-android作爲參考。
另外如何使用SessionManager在How session management works
的角色框架提到引入了一個會話,其包括 連接到設備,發射(或連接)的接收器的應用程序, 連接到的概念應用程序,並初始化媒體控制通道,如果 合適。從用戶的角度來看,當 用戶從演員對話框選擇一個接收器和停止時,無論是 用戶在會話開始選擇停止投放,或者直到另一個發件人蒙上東西 相同的設備。
會話由SessionManager類管理,您的應用可以通過CastContext.getSessionManager()訪問 。單獨的會話是由類Session的子類表示的 。例如, CastSession用Cast設備表示會話。您的應用可以訪問 當前處於活動狀態的Cast會話 SessionManager.getCurrentCastSession()。
您的應用可以使用SessionManagerListener類監視會話 事件,如創建,暫停,恢復和終止。當會話處於活動狀態時, 框架會自動嘗試從非正常/突然 終止中恢復。
會話被創建,並且響應於用戶從對話框MediaRouter手勢 自動拆除。
如果你需要知道的會話的狀態變化,可以 實現SessionManagerListener。本示例監聽活動中CastSession的可用性 。
public class MyActivity extends Activity {
private CastSession mCastSession;
private SessionManager mSessionManager;
private final SessionManagerListener mSessionManagerListener =
new SessionManagerListenerImpl();
private class SessionManagerListenerImpl implements SessionManagerListener {
@Override
public void onSessionStarted(Session session, String sessionId) {
invalidateOptionsMenu();
}
@Override
public void onSessionResumed(Session session, boolean wasSuspended) {
invalidateOptionsMenu();
}
@Override
public void onSessionEnded(Session session, int error) {
finish();
}
}
@Override
protected void onCreate() {
mSessionManager = CastContext.getSharedInstance(this).getSessionManager();
super.onCreate();
}
@Override
protected void onResume() {
mCastSession = mSessionManager.getCurrentCastSession();
mSessionManager.addSessionManagerListener(mSessionManagerListener);
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
mSessionManager.removeSessionManagerListener(mSessionManagerListener);
mCastSession = null;
}
}
0
最近我有同樣的要求。
可以使用MediaRouter檢測投射設備。
MediaRouter mMediaRouter = MediaRouter.getInstance(this);
MediaRouteSelector mMediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(getString(R.string.cast_app_id)))
.build();
mMediaRouter.addCallback(mMediaRouterCallback, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
// Then get your media routes using
List<RouteInfo> routes = mMediaRouter.getRoutes()
// Get cast devices for your media routes.
// Save these for future use as per your use case
List<CastDevice> castDevices = routes.stream()
.map(route -> CastDevice.getFromBundle(route.getExtras()))
.collect(Collectors.toCollection())
要自動連接到投射設備並傳輸一些內容,請使用此代碼段。請注意,您可能無法使用RemoteMediaPlayer,具體取決於您的接收器應用程序。這段代碼工作對我來說,因爲我的接收器應用程序使用MediaManager
// Connect to the cast device you want to stream the content to
private void connectToCastDevice(CastDevice castDevice) {
Cast.CastOptions apiOptions = Cast.CastOptions.builder(castDevice, mCastListener).build();
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Cast.API, apiOptions)
.addConnectionCallbacks(mConnectionCallback)
.addOnConnectionFailedListener(mConnectionFailedListener)
.build();
mApiClient.connect();
}
// After you are connected to the cast device. Load your media to it
// In my case using RemoteMediaPlayer
private void loadMediaItem(final MediaInfo mediaInfo) {
LaunchOptions launchOptions = new LaunchOptions();
launchOptions.setRelaunchIfRunning(false);
PendingResult<Cast.ApplicationConnectionResult> result = Cast.CastApi.launchApplication(mApiClient, getString(R.string.cast_app_id), launchOptions);
result.then(new ResultTransform<Cast.ApplicationConnectionResult, RemoteMediaPlayer.MediaChannelResult>() {
@Nullable @Override
public PendingResult<RemoteMediaPlayer.MediaChannelResult> onSuccess(@NonNull Cast.ApplicationConnectionResult applicationConnectionResult) {
Log.d(TAG, "Application launch result: " + applicationConnectionResult);
return mRemoteMediaPlayer.load(mApiClient, mediaInfo);
}
}).andFinally(new ResultCallbacks<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onSuccess(@NonNull RemoteMediaPlayer.MediaChannelResult mediaChannelResult) {
Log.d(TAG, "Media channel result: " + mediaChannelResult);
}
@Override
public void onFailure(@NonNull Status status) {
Log.d(TAG, "Media channel status: " + status);
}
});
}
相關問題
- 1. 鑄造會話變量 - ViewBag MVC4 - 鑄造
- 2. 會話開始不「開始」
- 3. 鑄造原始INT到數
- 4. 通話後設備斷開
- 5. XMLHttpRequest延遲開始會話
- 6. PHP沒有開始會話?
- 7. Android會話同時開始
- 8. 開始一個ASP會話
- 9. selenium:未開始新會話
- 10. 如何開始會話?
- 11. 幫助PHP會話開始
- 12. Asp.net會話開始如何?
- 13. 何時開始會話?
- 14. PHP cookie將不會設置,除非我開始會話
- 15. 鑄造錯誤?從片段打開對話框片段
- 16. 在ASP.NET C中的會話中鑄造對象#
- 17. 開始作業cmdlet刪除通過的對象鑄造
- 18. 加載動畫開始在前ICS設備,但不會啓動後ICS設備
- 19. 鑄造
- 20. 鑄造
- 21. 廣東話靜態鑄造類整數
- 22. 鑄造雙(原始)長(包裝)
- 23. C結構數組初始化鑄造
- 24. 鑄造初始化器到指針
- 25. 初始化使整數沒有鑄造
- 26. 鑄造原始的自定義類
- 27. 鑄造原始數據類型
- 28. 原始構造VS鑄件轉換
- 29. 鑄造非原始的雙從JSONObject的
- 30. 定製鑄造原始數據類型
您正在使用過時的代碼,v2是沒有更多的支持,這個答案沒有回答我的問題。 – greywolf82
您可以使用它來[啓動會話](https://developer.android.com/reference/android/support/v7/media/MediaControlIntent.html#ACTION_START_SESSION)。 [示例代碼](https://github.com/KevinDyer/Chromecast-PlaySpace/blob/master/DemoCastPlayer/src/com/google/android/gms/cast/samples/democastplayer/MrpCastPlayerActivity.java#L274)。請注意,如果在播放媒體時未指定會話ID,[播放媒體](https://developer.android.com/reference/android/support/v7/media/MediaControlIntent.html#ACTION_PLAY)會創建一個新會話。 – Rishabh
您可以選擇答案中提到的媒體路由,然後使用[RemotePlayBack](https://developer.android.com/guide/topics/media/mediarouter.html)客戶端爲您管理會話。 – Rishabh