private async void DevicePicker_DeviceSelected(DevicePicker sender, DeviceSelectedEventArgs args) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { DeviceInformation selectedDevice = args.SelectedDevice; #if DEBUG // The args.SelectedCastingDevice is proxied from the picker process. The picker process is // dismissmed as soon as you break into the debugger. Creating a non-proxied version // allows debugging since the proxied version stops working once the picker is dismissed. selectedDevice = await DeviceInformation.CreateFromIdAsync(args.SelectedDevice.Id); #endif if (await DialDevice.DeviceInfoSupportsDialAsync(selectedDevice)) { await SendDialParameter(sender, args); } else if (await CastingDevice.DeviceInfoSupportsCastingAsync(selectedDevice)) { await CastingVideoToScreen(sender, args); } else if (ProjectionManager.ProjectionDisplayAvailable) { await ProjectioinViewToScreen(sender, args); } }); }
private async void DevicePicker_DisconnectButtonClicked(DevicePicker sender, DeviceDisconnectButtonClickedEventArgs args) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { DeviceInformation selectedDevice = args.Device; if (await DialDevice.DeviceInfoSupportsDialAsync(selectedDevice)) { await StopDialConnection(sender, selectedDevice); return; } await StopProjection(sender, selectedDevice); }); }
private async Task <bool> TryLaunchDialAppAsync(DeviceInformation device) { bool dialAppLaunchSucceeded = false; //Update the launch arguments to include the Position this.dial_launch_args_textbox.Text = string.Format("v={0}&t={1}&pairingCode=E4A8136D-BCD3-45F4-8E49-AE01E9A46B5F", video.Id, player.Position.Ticks); //Try to create a DIAL device. If it doesn't succeed, the selected device does not support DIAL. rootPage.NotifyUser(string.Format("Checking to see if device {0} supports DIAL", device.Name), NotifyType.StatusMessage); if (await DialDevice.DeviceInfoSupportsDialAsync(device)) { DialDevice dialDevice = null; //Try to create a DIAL device. If it doesn't succeed, the selected device does not support DIAL. rootPage.NotifyUser(string.Format("Attempting to resolve DIAL device for '{0}'", device.Name), NotifyType.StatusMessage); try { dialDevice = await DialDevice.FromIdAsync(device.Id); } catch { } if (dialDevice == null) { //Try to create a DIAL device. If it doesn't succeed, the selected device does not support DIAL. rootPage.NotifyUser(string.Format("'{0}' does not support DIAL", device.Name), NotifyType.StatusMessage); } else { //Get the DialApp object for the specific application on the selected device DialApp app = dialDevice.GetDialApp(this.dial_appname_textbox.Text); if (app == null) { //Try to create a DIAL device. If it doesn't succeed, the selected device does not support DIAL. rootPage.NotifyUser(string.Format("'{0}' cannot find app with ID '{1}'", device.Name, this.dial_appname_textbox.Text), NotifyType.StatusMessage); } else { //Get the current application state DialAppStateDetails stateDetails = await app.GetAppStateAsync(); if (stateDetails.State == DialAppState.NetworkFailure) { // In case getting the application state failed because of a network failure rootPage.NotifyUser("Network Failure while getting application state", NotifyType.ErrorMessage); } else { rootPage.NotifyUser(string.Format("Attempting to launch '{0}'", app.AppName), NotifyType.StatusMessage); //Launch the application on the 1st screen device DialAppLaunchResult result = await app.RequestLaunchAsync(this.dial_launch_args_textbox.Text); //Verify to see whether the application was launched if (result == DialAppLaunchResult.Launched) { //Remember the device to which casting succeeded activeDevice = device; //DIAL is sessionsless but the DIAL app allows us to get the state and "disconnect". //Disconnect in the case of DIAL is equivalenet to stopping the app. activeCastConnectionHandler = app; rootPage.NotifyUser(string.Format("Launched '{0}'", app.AppName), NotifyType.StatusMessage); //This is where you will need to add you application specific communication between your 1st and 2nd screen applications //... dialAppLaunchSucceeded = true; } } } } } else { rootPage.NotifyUser(string.Format("'{0}' does not support DIAL", device.Name), NotifyType.StatusMessage); } return(dialAppLaunchSucceeded); }