Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Cast

Avatar for Mobile Flock Mobile Flock
September 14, 2019

Google Cast

The advantages of cast enabled mobile applications and will do a walkthrough on how we can create cast enabled applications.

Avatar for Mobile Flock

Mobile Flock

September 14, 2019
Tweet

More Decks by Mobile Flock

Other Decks in Technology

Transcript

  1. Or

  2. import GoogleCast … { private var castButton: GCKUICastButton … override

    func viewDidLoad() { … castButton = GCKUICastButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(24), height: CGFloat(24))) castButton.tintColor = UIColor.white navigationItem.rightBarButtonItem = UIBarButtonItem(customView: castButton) } }
  3. import GoogleCast … class AppDelegate: UIResponder, UIApplicationDelegate { … func

    application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { … let options = GCKCastOptions(discoveryCriteria: GCKDiscoveryCriteria(applicationID: kReceiverAppID)) options.physicalVolumeButtonsWillControlDeviceVolume = true GCKCastContext.setSharedInstanceWith(options) // ***ADD THE CAST BUTTON HERE AS WELL!*** } }
  4. import GoogleCast … class sampleViewController: UIViewController, GCKSessionManagerListener, GCKRemoteMediaClientListener, LocalPlayerViewDelegate, GCKRequestDelegate

    { … private var sessionManager: GCKSessionManager! … required init?(coder: NSCoder) { super.init(coder: coder) sessionManager = GCKCastContext.sharedInstance().sessionManager … } … }
  5. func sessionManager(_: GCKSessionManager, didStart session: GCKSession) { print("MediaViewController: sessionManager didStartSession

    \(session)") setQueueButtonVisible(true) switchToRemotePlayback() } func sessionManager(_: GCKSessionManager, didResumeSession session: GCKSession) { print("MediaViewController: sessionManager didResumeSession \(session)") setQueueButtonVisible(true) switchToRemotePlayback() } /* CREATE FUNCTIONS “didEnd”, “didFailToStartSessionWithError”, “didFailToResumeSession” */
  6. func loadSelectedItem(byAppending appending: Bool) { print("enqueue item \(String(describing: mediaInfo))") if

    let remoteMediaClient = sessionManager.currentCastSession?.remoteMediaClient { // Set up the metadata & mediaInfoBuilder let mediaQueueItemBuilder = GCKMediaQueueItemBuilder() mediaQueueItemBuilder.mediaInformation = mediaInfo mediaQueueItemBuilder.autoplay = true let mediaQueueItem = mediaQueueItemBuilder.build() if appending { let request = remoteMediaClient.queueInsert(mediaQueueItem, beforeItemWithID: kGCKMediaQueueInvalidItemID) request.delegate = self }
  7. else { let queueDataBuilder = GCKMediaQueueDataBuilder(queueType: .generic) queueDataBuilder.items = [mediaQueueItem]

    queueDataBuilder.repeatMode = remoteMediaClient.mediaStatus?.queueRepeatMode ?? .off let mediaLoadRequestDataBuilder = GCKMediaLoadRequestDataBuilder() mediaLoadRequestDataBuilder.queueData = queueDataBuilder.build() let request = remoteMediaClient.loadMedia(with: mediaLoadRequestDataBuilder.build()) request.delegate = self } }
  8. func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    ... let appStoryboard = UIStoryboard(name: "Main", bundle: nil) guard let navigationController = appStoryboard.instantiateViewController(withIdentifier: "MainNavigation") as? UINavigationController else { return false } let castContainerVC = GCKCastContext.sharedInstance().createCastContainerController(for: navigationController) as GCKUICastContainerViewController castContainerVC.miniMediaControlsItemEnabled = true window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = castContainerVC window?.makeKeyAndVisible() ... }
  9. var isCastControlBarsEnabled: Bool { get { let castContainerVC = (window?.rootViewController

    as? GCKUICastContainerViewController) return castContainerVC!.miniMediaControlsItemEnabled } set(notificationsEnabled) { var castContainerVC: GCKUICastContainerViewController? castContainerVC = (window?.rootViewController as? GCKUICastContainerViewController) castContainerVC?.miniMediaControlsItemEnabled = notificationsEnabled } }
  10. override func viewDidLoad() { ... NotificationCenter.default.addObserver(self, selector: #selector(castDeviceDidChange), name: NSNotification.Name.gckCastStateDidChange,

    object: GCKCastContext.sharedInstance()) } @objc func castDeviceDidChange(_: Notification) { if GCKCastContext.sharedInstance().castState != .noDevicesAvailable { GCKCastContext.sharedInstance().presentCastInstructionsViewControllerOnce(with: castButton) } }
  11. Inside of didFinishLaunchingWithOptions in the AppDelegate:- GCKCastContext.sharedInstance().useDefaultExpandedMediaControls = true To

    launch the Expanded controller:- GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()