Inicio automático con Reproducción automática

Puede usar Reproducción automática para ofrecer su aplicación como opción cuando un usuario conecte un dispositivo a su PC. Esto incluye dispositivos que no son de volumen, como una cámara o un reproductor multimedia, o dispositivos de volumen, como una unidad USB, una tarjeta SD o un DVD. También puede usar la Reproducción automática para ofrecer su aplicación como opción cuando los usuarios comparten archivos entre dos PC mediante proximidad (toque).

Nota:

Si es un fabricante de dispositivos y quiere asociar la aplicación de dispositivo de Microsoft Store como un controlador de reproducción automática para el dispositivo, puede identificar esa aplicación en los metadatos del dispositivo. Para obtener más información, consulte Reproducción automática para aplicaciones de dispositivos de Microsoft Store.

Registro para contenido de reproducción automática

Puede registrar aplicaciones como opciones para eventos de contenido de reproducción automática. Los eventos de contenido de reproducción automática se generan cuando se inserta en el equipo un dispositivo con volumen, como una tarjeta de memoria de cámara, una unidad USB o un DVD. Aquí se muestra cómo identificar la aplicación como una opción de reproducción automática cuando se inserta un dispositivo de volumen desde una cámara.

En este tutorial, ha creado una aplicación que muestra archivos de imagen o los copia en Imágenes. Registró la aplicación para el evento de contenido de reproducción automática ShowPicturesOnArrival.

La reproducción automática también genera eventos de contenido para el contenido compartido entre PC mediante proximidad (toque). Puede usar los pasos y el código de esta sección para controlar los archivos que se comparten entre PC que usan proximidad. En la tabla siguiente se enumeran los eventos de contenido de reproducción automática que están disponibles para compartir contenido mediante proximidad.

Action Evento de contenido de reproducción automática
Compartir música PlayMusicFilesOnArrival
Compartir vídeos PlayVideoFilesOnArrival

Cuando los archivos se comparten mediante proximidad, la propiedad Files del objeto FileActivatedEventArgs contiene una referencia a una carpeta raíz que contiene todos los archivos compartidos.

Paso 1: Crear un nuevo proyecto y agregar declaraciones de reproducción automática

  1. Abra Microsoft Visual Studio y seleccione Nuevo proyecto en el menú Archivo. En la sección Visual C#, en Windows, seleccione Aplicación vacía (Windows universal). Asigne un nombre a la aplicación AutoPlayDisplayOrCopyImages y haga clic en Aceptar.
  2. Abra el archivo Package.appxmanifest y seleccione la pestaña Capacidades. Seleccione las capacidades Almacenamiento extraíble y Biblioteca de imágenes. Esto proporciona a la aplicación acceso a dispositivos de almacenamiento extraíbles para la memoria de la cámara y acceso a imágenes locales.
  3. En el archivo de manifiesto, seleccione la pestaña Declaraciones. En la lista desplegable Declaraciones disponibles, seleccione Contenido de reproducción automática y haga clic en Agregar. Seleccione el nuevo elemento Contenido de reproducción automática que se agregó a la lista Declaraciones admitidas.
  4. Una declaración de Contenido de reproducción automática identifica la aplicación como una opción cuando la reproducción automática genera un evento de contenido. El evento se basa en el contenido de un dispositivo de volumen, como un DVD o una unidad Thumb. Reproducción automática examina el contenido del dispositivo de volumen y determina qué evento de contenido se va a generar. Si la raíz del volumen contiene una carpeta DCIM, AVCHD o PRIVATE\ACHD, o si un usuario ha habilitado Elegir qué hacer con cada tipo de contenido multimedia en el Panel de control de reproducción automática y se encuentran imágenes en la raíz de dicho volumen, la reproducción automática genera el evento ShowPicturesOnArrival. En la sección Acciones de inicio, escriba los valores de la tabla 1 siguiente para la primera acción de inicio.
  5. En la sección Acciones de inicio del elemento Contenido de reproducción automática, haga clic en Agregar nuevo para agregar una segunda acción de inicio. Escriba los valores de la tabla 2 siguiente para la segunda acción de inicio.
  6. En la lista desplegable Declaraciones disponibles, seleccione Asociaciones de tipos de archivo y haga clic en Agregar. En las propiedades de la nueva declaración Asociaciones de tipo de archivo, establezca el campo Nombre para mostrar en Copiar o mostrar imágenes de reproducción automática y el campo Nombre en image_association1. En la sección Tipos de archivo admitidos, haga clic en Agregar nuevo. Establezca el campo Tipo de archivo en .jpg. En la sección Tipos de archivo admitidos, establezca el campo Tipo de archivo de la nueva asociación de archivos en .png. En el caso de los eventos de contenido, Reproducción automática filtra los tipos de archivo que no están asociados explícitamente a la aplicación.
  7. Guarda y cierra el archivo de manifiesto.

Tabla 1

Configuración Valor
Verbo mostrar
Nombre para mostrar de la acción Mostrar imágenes
Evento de contenido ShowPicturesOnArrival

La configuración Nombre para mostrar de la acción identifica la cadena que muestra la reproducción automática para la aplicación. La opción de configuración Verbo identifica un valor que se pasa a la aplicación para la opción seleccionada. Puede especificar varias acciones de inicio para un evento de reproducción automática y usar la configuración Verbo para determinar qué opción seleccionó un usuario para su aplicación. Para saber qué opción seleccionó el usuario, compruebe la propiedad verb de los argumentos del evento de inicio que se pasaron a la aplicación. Puede usar cualquier valor para la configuración Verb a excepción de open, que está reservado.

Tabla 2

Configuración Valor
Verbo copy
Nombre para mostrar de la acción Copiar imágenes en la biblioteca
Evento de contenido ShowPicturesOnArrival

Paso 2: Agregar interfaz de usuario XAML

Abra el archivo MainPage.xaml y agregue el siguiente XAML a la sección <Cuadrícula> predeterminada.

<TextBlock FontSize="18">File List</TextBlock>
<TextBlock x:Name="FilesBlock" HorizontalAlignment="Left" TextWrapping="Wrap"
           VerticalAlignment="Top" Margin="0,20,0,0" Height="280" Width="240" />
<Canvas x:Name="FilesCanvas" HorizontalAlignment="Left" VerticalAlignment="Top"
        Margin="260,20,0,0" Height="280" Width="100"/>

Paso 3: Agregar código de inicialización

El código de este paso comprueba el valor de verbo en la propiedad Verb, que es uno de los argumentos de inicio pasados a la aplicación durante el evento OnFileActivated. A continuación, el código llama a un método relacionado con la opción seleccionada por el usuario. Para el evento de memoria de la cámara, la reproducción automática pasa la carpeta raíz del almacenamiento de la cámara a la aplicación. Puede recuperar esta carpeta del primer elemento de la propiedad Files.

Abra el archivo App.xaml.cs y agregue el siguiente código a la clase App.

protected override void OnFileActivated(FileActivatedEventArgs args)
{
    if (args.Verb == "show")
    {
        Frame rootFrame = (Frame)Window.Current.Content;
        MainPage page = (MainPage)rootFrame.Content;

        // Call DisplayImages with root folder from camera storage.
        page.DisplayImages((Windows.Storage.StorageFolder)args.Files[0]);
    }

    if (args.Verb == "copy")
    {
        Frame rootFrame = (Frame)Window.Current.Content;
        MainPage page = (MainPage)rootFrame.Content;

        // Call CopyImages with root folder from camera storage.
        page.CopyImages((Windows.Storage.StorageFolder)args.Files[0]);
    }

    base.OnFileActivated(args);
}

Nota Los métodos DisplayImages y CopyImages se agregan en los pasos siguientes.

Paso 4: Agregar código para mostrar imágenes

En el archivo MainPage.xaml.cs, agregue el siguiente código en la clase MainPage.

async internal void DisplayImages(Windows.Storage.StorageFolder rootFolder)
{
    // Display images from first folder in root\DCIM.
    var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
    var folderList = await dcimFolder.GetFoldersAsync();
    var cameraFolder = folderList[0];
    var fileList = await cameraFolder.GetFilesAsync();
    for (int i = 0; i < fileList.Count; i++)
    {
        var file = (Windows.Storage.StorageFile)fileList[i];
        WriteMessageText(file.Name + "\n");
        DisplayImage(file, i);
    }
}

async private void DisplayImage(Windows.Storage.IStorageItem file, int index)
{
    try
    {
        var sFile = (Windows.Storage.StorageFile)file;
        Windows.Storage.Streams.IRandomAccessStream imageStream =
            await sFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
        Windows.UI.Xaml.Media.Imaging.BitmapImage imageBitmap =
            new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        imageBitmap.SetSource(imageStream);
        var element = new Image();
        element.Source = imageBitmap;
        element.Height = 100;
        Thickness margin = new Thickness();
        margin.Top = index * 100;
        element.Margin = margin;
        FilesCanvas.Children.Add(element);
    }
    catch (Exception e)
    {
       WriteMessageText(e.Message + "\n");
    }
}

// Write a message to MessageBlock on the UI thread.
private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;

private async void WriteMessageText(string message, bool overwrite = false)
{
    await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
        () =>
        {
            if (overwrite)
                FilesBlock.Text = message;
            else
                FilesBlock.Text += message;
        });
}

Paso 5: Agregar código para copiar imágenes

En el archivo MainPage.xaml.cs, agregue el siguiente código en la clase MainPage.

async internal void CopyImages(Windows.Storage.StorageFolder rootFolder)
{
    // Copy images from first folder in root\DCIM.
    var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
    var folderList = await dcimFolder.GetFoldersAsync();
    var cameraFolder = folderList[0];
    var fileList = await cameraFolder.GetFilesAsync();

    try
    {
        var folderName = "Images " + DateTime.Now.ToString("yyyy-MM-dd HHmmss");
        Windows.Storage.StorageFolder imageFolder = await
            Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync(folderName);

        foreach (Windows.Storage.IStorageItem file in fileList)
        {
            CopyImage(file, imageFolder);
        }
    }
    catch (Exception e)
    {
        WriteMessageText("Failed to copy images.\n" + e.Message + "\n");
    }
}

async internal void CopyImage(Windows.Storage.IStorageItem file,
                              Windows.Storage.StorageFolder imageFolder)
{
    try
    {
        Windows.Storage.StorageFile sFile = (Windows.Storage.StorageFile)file;
        await sFile.CopyAsync(imageFolder, sFile.Name);
        WriteMessageText(sFile.Name + " copied.\n");
    }
    catch (Exception e)
    {
        WriteMessageText("Failed to copy file.\n" + e.Message + "\n");
    }
}

Paso 6: Compilar y ejecutar la aplicación

  1. Presione F5 para compilar e implementar la aplicación (en modo de depuración).
  2. Para ejecutar la aplicación, inserte una tarjeta de memoria de cámara u otro dispositivo de almacenamiento desde una cámara en el PC. A continuación, seleccione una de las opciones de evento de contenido que especificó en el archivo package.appxmanifest en la lista de opciones de reproducción automática. Este código de ejemplo solo muestra o copia imágenes en la carpeta DCIM de una tarjeta de memoria de cámara. Si la tarjeta de memoria de la cámara almacena imágenes en una carpeta AVCHD o PRIVATE\ACHD, deberá actualizar el código en consecuencia.

Nota:

Si no tiene una tarjeta de memoria de cámara, puede usar una unidad flash si tiene una carpeta denominada DCIM en la raíz y si la carpeta DCIM tiene una subcarpeta que contiene imágenes.

Registro para un dispositivo de reproducción automática

Puede registrar aplicaciones como opciones para eventos de dispositivo de reproducción automática. Se generan eventos de dispositivo de reproducción automática cuando se conecta un dispositivo a un PC.

Aquí se muestra cómo identificar la aplicación como una opción de Reproducción automática cuando una cámara está conectada a un PC. La aplicación se registra como controlador para el evento WPD\ImageSourceAutoPlay. Se trata de un evento común que el sistema Windows Portable Device (WPD) genera cuando las cámaras y otros dispositivos de creación de imágenes le notifican que son un ImageSource mediante MTP. Para obtener más información, consulte Dispositivos portátiles de Windows.

Importante Las API Windows.Devices.Portable.StorageDevice forman parte de la familia de dispositivos de escritorio. Las aplicaciones solo pueden usar estas API en dispositivos Windows 10 de la familia de dispositivos de escritorio, como PC.

Paso 1: Crear otro nuevo proyecto y agregar declaraciones de reproducción automática

  1. Abra Visual Studio y seleccione Nuevo proyecto en el menú Archivo. En la sección Visual C#, en Windows, seleccione Aplicación vacía (Windows universal). Asigne un nombre a la aplicación AutoPlayDevice_Camera y haga clic en Aceptar.
  2. Abra el archivo Package.appxmanifest y seleccione la pestaña Capacidades. Seleccione la funcionalidad Almacenamiento extraíble. Esto proporciona a la aplicación acceso a los datos de la cámara como un dispositivo de volumen de almacenamiento extraíble.
  3. En el archivo de manifiesto, seleccione la pestaña Declaraciones. En la lista desplegable Declaraciones disponibles, seleccione Dispositivo de reproducción automática y haga clic en Agregar. Seleccione el nuevo elemento Dispositivo de reproducción automática que se agregó a la lista Declaraciones admitidas.
  4. Una declaración de dispositivo de reproducción automática identifica la aplicación como una opción cuando la reproducción automática genera un evento de dispositivo para eventos conocidos. En la sección Acciones de inicio, escriba los valores de la tabla siguiente para la primera acción de inicio.
  5. En la lista desplegable Declaraciones disponibles, seleccione Asociaciones de tipos de archivo y haga clic en Agregar. En las propiedades de la nueva declaración Asociaciones de tipo de archivo, establezca el campo Nombre para mostrar en Mostrar imágenes de la cámara y el campo Nombre en camera_association1. En la sección Tipos de archivo admitidos, haga clic en Agregar nuevo (en caso necesario). Establezca el campo Tipo de archivo en .jpg. En la sección Tipos de archivo admitidos, haga clic de nuevo en Agregar nuevo. Establezca el campo Tipo de archivo de la nueva asociación de archivos en .png. En el caso de los eventos de contenido, Reproducción automática filtra los tipos de archivo que no están asociados explícitamente a la aplicación.
  6. Guarda y cierra el archivo de manifiesto.
Configuración Valor
Verbo mostrar
Nombre para mostrar de la acción Mostrar imágenes
Evento de contenido WPD\ImageSource

La configuración Nombre para mostrar de la acción identifica la cadena que muestra la reproducción automática para la aplicación. La opción de configuración Verbo identifica un valor que se pasa a la aplicación para la opción seleccionada. Puede especificar varias acciones de inicio para un evento de reproducción automática y usar la configuración Verbo para determinar qué opción seleccionó un usuario para su aplicación. Para saber qué opción seleccionó el usuario, compruebe la propiedad verb de los argumentos del evento de inicio que se pasaron a la aplicación. Puede usar cualquier valor para la configuración Verb a excepción de open, que está reservado. Para obtener un ejemplo de uso de varios verbos en una sola aplicación, consulte Registro de contenido de reproducción automática.

Paso 2: Agregar referencia de ensamblado para las extensiones de escritorio

Las API necesarias para acceder al almacenamiento en un dispositivo portátil Windows, Windows.Devices.Portable.StorageDevice, forman parte de la familia de dispositivos de escritorio. Esto significa que se requiere un ensamblado especial para usar las API y esas llamadas solo funcionarán en un dispositivo de la familia de dispositivos de escritorio (como un PC).

  1. En el Explorador de soluciones, haga clic con el botón derecho en Referencias y, a continuación, en Agregar referencia…
  2. Expanda Windows universal y haga clic en Extensiones.
  3. A continuación, seleccione Extensiones de escritorio de Windows para UWP y haga clic en Aceptar.

Paso 3: Agregar interfaz de usuario XAML

Abra el archivo MainPage.xaml y agregue el siguiente XAML a la sección <Cuadrícula> predeterminada.

<StackPanel Orientation="Vertical" Margin="10,0,-10,0">
    <TextBlock FontSize="24">Device Information</TextBlock>
    <StackPanel Orientation="Horizontal">
        <TextBlock x:Name="DeviceInfoTextBlock" FontSize="18" Height="400" Width="400" VerticalAlignment="Top" />
        <ListView x:Name="ImagesList" HorizontalAlignment="Left" Height="400" VerticalAlignment="Top" Width="400">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <Image Source="{Binding Path=Source}" />
                        <TextBlock Text="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid Orientation="Horizontal" ItemHeight="100" ItemWidth="120"></WrapGrid>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
    </StackPanel>
</StackPanel>

Paso 4: Agregar código de activación

El código de este paso hace referencia a la cámara como StorageDevice pasando el identificador de información del dispositivo de la cámara al método FromId. El identificador de información del dispositivo de la cámara se obtiene mediante la primera conversión de los argumentos del evento como DeviceActivatedEventArgs y, a continuación, obtiene el valor de la propiedad DeviceInformationId.

Abra el archivo App.xaml.cs y agregue el siguiente código a la clase App.

protected override void OnActivated(IActivatedEventArgs args)
{
   if (args.Kind == ActivationKind.Device)
   {
      Frame rootFrame = null;
      // Ensure that the current page exists and is activated
      if (Window.Current.Content == null)
      {
         rootFrame = new Frame();
         rootFrame.Navigate(typeof(MainPage));
         Window.Current.Content = rootFrame;
      }
      else
      {
         rootFrame = Window.Current.Content as Frame;
      }
      Window.Current.Activate();

      // Make sure the necessary APIs are present on the device
      bool storageDeviceAPIPresent =
      Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Devices.Portable.StorageDevice");

      if (storageDeviceAPIPresent)
      {
         // Reference the current page as type MainPage
         var mPage = rootFrame.Content as MainPage;

         // Cast the activated event args as DeviceActivatedEventArgs and show images
         var deviceArgs = args as DeviceActivatedEventArgs;
         if (deviceArgs != null)
         {
            mPage.ShowImages(Windows.Devices.Portable.StorageDevice.FromId(deviceArgs.DeviceInformationId));
         }
      }
      else
      {
         // Handle case where APIs are not present (when the device is not part of the desktop device family)
      }

   }

   base.OnActivated(args);
}

Nota:

El método ShowImages se agrega en el paso siguiente.

Paso 5: Agregar código para mostrar información del dispositivo

Puede obtener información sobre la cámara de las propiedades de la clase StorageDevice. El código de este paso muestra el nombre del dispositivo y otra información al usuario cuando se ejecuta la aplicación. A continuación, el código llama a los métodos GetImageList y GetThumbnail, que agregará en el paso siguiente, para mostrar miniaturas de las imágenes almacenadas en la cámara.

En el archivo MainPage.xaml.cs, agregue el siguiente código en la clase MainPage.

private Windows.Storage.StorageFolder rootFolder;

internal async void ShowImages(Windows.Storage.StorageFolder folder)
{
    DeviceInfoTextBlock.Text = "Display Name = " + folder.DisplayName + "\n";
    DeviceInfoTextBlock.Text += "Display Type =  " + folder.DisplayType + "\n";
    DeviceInfoTextBlock.Text += "FolderRelativeId = " + folder.FolderRelativeId + "\n";

    // Reference first folder of the device as the root
    rootFolder = (await folder.GetFoldersAsync())[0];
    var imageList = await GetImageList(rootFolder);

    foreach (Windows.Storage.StorageFile img in imageList)
    {
        ImagesList.Items.Add(await GetThumbnail(img));
    }
}

Nota:

Los métodos GetImageList y GetThumbnail se agregan en el paso siguiente.

Paso 6: Agregar código para mostrar imágenes

El código de este paso muestra miniaturas de las imágenes almacenadas en la cámara. El código realiza llamadas asincrónicas a la cámara para obtener la imagen en miniatura. Sin embargo, la siguiente llamada asincrónica no se produce hasta que se completa la llamada asincrónica anterior. Esto garantiza que solo se realice una solicitud a la cámara a la vez.

En el archivo MainPage.xaml.cs, agregue el siguiente código en la clase MainPage.

async private System.Threading.Tasks.Task<List<Windows.Storage.StorageFile>> GetImageList(Windows.Storage.StorageFolder folder)
{
    var result = await folder.GetFilesAsync();
    var subFolders = await folder.GetFoldersAsync();
    foreach (Windows.Storage.StorageFolder f in subFolders)
        result = result.Union(await GetImageList(f)).ToList();

    return (from f in result orderby f.Name select f).ToList();
}

async private System.Threading.Tasks.Task<Image> GetThumbnail(Windows.Storage.StorageFile img)
{
    // Get the thumbnail to display
    var thumbnail = await img.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem,
                                                100,
                                                Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);

    // Create a XAML Image object bind to on the display page
    var result = new Image();
    result.Height = thumbnail.OriginalHeight;
    result.Width = thumbnail.OriginalWidth;
    result.Name = img.Name;
    var imageBitmap = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
    imageBitmap.SetSource(thumbnail);
    result.Source = imageBitmap;

    return result;
}

Paso 7: Compilar y ejecutar la aplicación

  1. Presione F5 para compilar e implementar la aplicación (en modo de depuración).
  2. Para ejecutar la aplicación, conecte una cámara a la máquina. Luego seleccione la aplicación en la lista de opciones de reproducción automática.

Nota:

No todas las cámaras anuncian el evento de dispositivo de reproducción automática WPD\ImageSource.

Configurar el almacenamiento extraíble

Puede identificar un dispositivo de volumen como una tarjeta de memoria o una unidad de memoria como un dispositivo de reproducción automática cuando el dispositivo de volumen está conectado a un PC. Esto es especialmente útil cuando quiere asociar una aplicación específica para que la reproducción automática se presente al usuario para el dispositivo de volumen.

Aquí se muestra cómo identificar el dispositivo de volumen como un dispositivo de reproducción automática.

Para identificar el dispositivo de volumen como un dispositivo de reproducción automática, agregue un archivo autorun.inf a la unidad raíz del dispositivo. En el archivo autorun.inf, agregue una clave CustomEvent a la sección Ejecución automática. Cuando el dispositivo de volumen se conecta a un PC, la reproducción automática encontrará el archivo autorun.inf y tratará el volumen como un dispositivo. La reproducción automática creará un evento de reproducción automática con el nombre que proporcionó para la clave CustomEvent. A continuación, puede crear una aplicación y registrarla como controlador para ese evento de reproducción automática. Cuando el dispositivo esté conectado al PC, la reproducción automática mostrará la aplicación como controlador para el dispositivo de volumen. Para obtener más información sobre los archivos autorun.inf, consulte las entradas autorun.inf.

Paso 1: Crear un archivo autorun.inf

En la unidad raíz del dispositivo de volumen, agregue un archivo denominado autorun.inf. Abra el archivo autorun.inf y agregue el texto siguiente.

[AutoRun]
CustomEvent=AutoPlayCustomEventQuickstart

Paso 2: Crear un nuevo proyecto y agregar declaraciones de reproducción automática

  1. Abra Visual Studio y seleccione Nuevo proyecto en el menú Archivo. En la sección Visual C#, en Windows, seleccione Aplicación vacía (Windows universal). Asigne a la aplicación el nombre AutoPlayCustomEvent y haga clic en Aceptar.
  2. Abra el archivo Package.appxmanifest y seleccione la pestaña Capacidades. Seleccione la funcionalidad Almacenamiento extraíble. Esto proporciona a la aplicación acceso a los archivos y carpetas en dispositivos de almacenamiento extraíbles.
  3. En el archivo de manifiesto, seleccione la pestaña Declaraciones. En la lista desplegable Declaraciones disponibles, seleccione Contenido de reproducción automática y haga clic en Agregar. Seleccione el nuevo elemento Contenido de reproducción automática que se agregó a la lista Declaraciones admitidas.

Nota:

Como alternativa, también puede agregar una declaración de dispositivo de reproducción automática para el evento de reproducción automática personalizado.

  1. En la sección Acciones de inicio de la declaración de eventos Contenido de reproducción automática, escriba los valores de la tabla siguiente para la primera acción de inicio.
  2. En la lista desplegable Declaraciones disponibles, seleccione Asociaciones de tipos de archivo y haga clic en Agregar. En las propiedades de la nueva declaración Asociaciones de tipo de archivo, establezca el campo Nombre para mostrar en Mostrar archivos .ms y el campo Nombre en ms_association. En la sección Tipos de archivo admitidos, haga clic en Agregar nuevo. Establezca el campo Tipo de archivo en .ms. En el caso de los eventos de contenido, Reproducción automática filtra los tipos de archivo que no están asociados explícitamente a la aplicación.
  3. Guarda y cierra el archivo de manifiesto.
Configuración Valor
Verbo mostrar
Nombre para mostrar de la acción Mostrar archivos
Evento de contenido AutoPlayCustomEventQuickstart

El valor de Evento de contenido es el texto que proporcionó para la clave CustomEvent en el archivo autorun.inf. La configuración Nombre para mostrar de la acción identifica la cadena que muestra la reproducción automática para la aplicación. La opción de configuración Verbo identifica un valor que se pasa a la aplicación para la opción seleccionada. Puede especificar varias acciones de inicio para un evento de reproducción automática y usar la configuración Verbo para determinar qué opción seleccionó un usuario para su aplicación. Para saber qué opción seleccionó el usuario, compruebe la propiedad verb de los argumentos del evento de inicio que se pasaron a la aplicación. Puede usar cualquier valor para la configuración Verb a excepción de open, que está reservado.

Paso 3: Agregar la interfaz de usuario XAML

Abra el archivo MainPage.xaml y agregue el siguiente XAML a la sección <Cuadrícula> predeterminada.

<StackPanel Orientation="Vertical">
    <TextBlock FontSize="28" Margin="10,0,800,0">Files</TextBlock>
    <TextBlock x:Name="FilesBlock" FontSize="22" Height="600" Margin="10,0,800,0" />
</StackPanel>

Paso 4: Agregar el código de activación

El código de este paso llama a un método para mostrar las carpetas en la unidad raíz del dispositivo de volumen. Para los eventos de contenido de reproducción automática, la reproducción automática pasa la carpeta raíz del dispositivo de almacenamiento en los argumentos de inicio pasados a la aplicación durante el evento OnFileActivated. Puede recuperar esta carpeta del primer elemento de la propiedad Files.

Abra el archivo App.xaml.cs y agregue el siguiente código a la clase App.

protected override void OnFileActivated(FileActivatedEventArgs args)
{
    var rootFrame = Window.Current.Content as Frame;
    var page = rootFrame.Content as MainPage;

    // Call ShowFolders with root folder from device storage.
    page.DisplayFiles(args.Files[0] as Windows.Storage.StorageFolder);

    base.OnFileActivated(args);
}

Nota:

El método DisplayFiles se agrega en el paso siguiente.

Paso 5: Agregar código para mostrar carpetas

En el archivo MainPage.xaml.cs, agregue el siguiente código en la clase MainPage.

internal async void DisplayFiles(Windows.Storage.StorageFolder folder)
{
    foreach (Windows.Storage.StorageFile f in await ReadFiles(folder, ".ms"))
    {
        FilesBlock.Text += "  " + f.Name + "\n";
    }
}

internal async System.Threading.Tasks.Task<IReadOnlyList<Windows.Storage.StorageFile>>
    ReadFiles(Windows.Storage.StorageFolder folder, string fileExtension)
{
    var options = new Windows.Storage.Search.QueryOptions();
    options.FileTypeFilter.Add(fileExtension);
    var query = folder.CreateFileQueryWithOptions(options);
    var files = await query.GetFilesAsync();

    return files;
}

Paso 6: Compilación y ejecución de la aplicación

  1. Presione F5 para compilar e implementar la aplicación (en modo de depuración).
  2. Para ejecutar la aplicación, inserte una tarjeta de memoria u otro dispositivo de almacenamiento en el PC. A continuación, seleccione la aplicación en la lista de opciones del controlador de reproducción automática.

Referencia de eventos de reproducción automática

El sistema de reproducción automática permite a las aplicaciones registrarse para una variedad de eventos de llegada de dispositivos y volúmenes (disco). Para registrarse en eventos de contenido de reproducción automática, debe habilitar la funcionalidad Almacenamiento extraíble en el manifiesto del paquete. En esta tabla se muestran los eventos para los que puede registrarse y cuándo se generan.

Escenario Evento Descripción
Uso de fotos en una cámara WPD\ImageSource Se genera para cámaras que se identifican como dispositivos portátiles de Windows y ofrecen la funcionalidad ImageSource.
Uso de música en un reproductor de audio WPD\AudioSource Se genera para reproductores multimedia que se identifican como dispositivos portátiles de Windows y ofrecen la funcionalidad AudioSource.
Uso de vídeos en una cámara de vídeo WPD\VideoSource Se genera para cámaras de vídeo que se identifican como dispositivos portátiles de Windows y ofrecen la funcionalidad VideoSource.
Acceso a una unidad flash conectada o a una unidad de disco duro externa StorageOnArrival Se genera cuando se conecta una unidad o un volumen al PC. Si la unidad o el volumen contiene una carpeta DCIM, AVCHD o PRIVATE\ACHD en la raíz del disco, se genera el evento ShowPicturesOnArrival en su lugar.
Uso de fotos del almacenamiento masivo (heredado) ShowPicturesOnArrival Se genera cuando una unidad o volumen contiene una carpeta DCIM, AVCHD o PRIVATE\ACHD en la raíz del disco. Si un usuario ha habilitado Elegir qué hacer con cada tipo de contenido multimedia en el Panel de control de reproducción automática, la reproducción automática examinará un volumen conectado al PC para determinar el tipo de contenido en el disco. Cuando se encuentran imágenes, se genera ShowPicturesOnArrival.
Recepción de fotos con uso compartido por proximidad (pulsar y enviar) ShowPicturesOnArrival Cuando los usuarios envían contenido con proximidad (pulsar y enviar), la reproducción automática examina los archivos compartidos para determinar el tipo de contenido. Si se encuentran imágenes, se genera ShowPicturesOnArrival.
Uso de música del almacenamiento masivo (heredado) PlayMusicFilesOnArrival Si un usuario ha habilitado Elegir qué hacer con cada tipo de contenido multimedia en el Panel de control de reproducción automática, la reproducción automática examinará un volumen conectado al PC para determinar el tipo de contenido en el disco. Si se encuentran archivos de música, se genera PlayMusicFilesOnArrival.
Recepción de música con uso compartido por proximidad (pulsar y enviar) PlayMusicFilesOnArrival Cuando los usuarios envían contenido con proximidad (pulsar y enviar), la reproducción automática examina los archivos compartidos para determinar el tipo de contenido. Si se encuentran archivos de música, se genera PlayMusicFilesOnArrival.
Uso de vídeos del almacenamiento masivo (heredado) PlayVideoFilesOnArrival Si un usuario ha habilitado Elegir qué hacer con cada tipo de contenido multimedia en el Panel de control de reproducción automática, la reproducción automática examinará un volumen conectado al PC para determinar el tipo de contenido en el disco. Cuando se encuentran archivos de vídeo, se genera PlayVideoFilesOnArrival.
Recepción de vídeos con uso compartido por proximidad (pulsar y enviar) PlayVideoFilesOnArrival Cuando los usuarios envían contenido con proximidad (pulsar y enviar), la reproducción automática examina los archivos compartidos para determinar el tipo de contenido. Si se encuentran archivos de vídeo, se genera PlayVideoFilesOnArrival.
Control de conjuntos mixtos de archivos desde un dispositivo conectado MixedContentOnArrival Si un usuario ha habilitado Elegir qué hacer con cada tipo de contenido multimedia en el Panel de control de reproducción automática, la reproducción automática examinará un volumen conectado al PC para determinar el tipo de contenido en el disco. Si no se encuentra ningún tipo de contenido específico (por ejemplo, imágenes), se genera MixedContentOnArrival.
Control de conjuntos mixtos de archivos con uso compartido de proximidad (pulsar y enviar) MixedContentOnArrival Cuando los usuarios envían contenido con proximidad (pulsar y enviar), la reproducción automática examina los archivos compartidos para determinar el tipo de contenido. Si no se encuentra ningún tipo de contenido específico (por ejemplo, imágenes), se genera MixedContentOnArrival.
Control del vídeo desde medios ópticos PlayDVDMovieOnArrival
PlayBluRayOnArrival
PlayVideoCDMovieOnArrival
PlaySuperVideoCDMovieOnArrival
Cuando se inserta un disco en la unidad óptica, la reproducción automática examinará los archivos para determinar el tipo de contenido. Cuando se encuentran archivos de vídeo, se genera el evento correspondiente al tipo de disco óptico.
Controlar música desde medios ópticos PlayCDAudioOnArrival
PlayDVDAudioOnArrival
Cuando se inserta un disco en la unidad óptica, la reproducción automática examinará los archivos para determinar el tipo de contenido. Cuando se encuentran archivos de música, se genera el evento correspondiente al tipo de disco óptico.
Reproducir discos mejorados PlayEnhancedCDOnArrival
PlayEnhancedDVDOnArrival
Cuando se inserta un disco en la unidad óptica, la reproducción automática examinará los archivos para determinar el tipo de contenido. Cuando se encuentra un disco mejorado, se genera el evento correspondiente al tipo de disco óptico.
Control de discos ópticos que se pueden escribir HandleCDBurningOnArrival
HandleDVDBurningOnArrival
HandleBDBurningOnArrival
Cuando se inserta un disco en la unidad óptica, la reproducción automática examinará los archivos para determinar el tipo de contenido. Cuando se encuentra un disco que se puede escribir, se genera el evento correspondiente al tipo de disco óptico.
Controlar cualquier otra conexión de dispositivo o volumen UnknownContentOnArrival Se genera para todos los eventos en caso de que se encuentre contenido que no coincide con ninguno de los eventos de contenido de la reproducción automática. No se recomienda el uso de este evento. Solo debe registrar la aplicación para los eventos específicos de reproducción automática que puede controlar.

Puede especificar que la reproducción automática genere un evento de contenido de reproducción automática personalizado mediante la entrada CustomEvent en el archivo autorun.inf de un volumen. Para obtener más información, consulte Entradas de autorun.inf.

Puede registrar la aplicación como un controlador de eventos de contenido de reproducción automática o dispositivo de reproducción automática agregando una extensión al archivo package.appxmanifest de la aplicación. Si usa Visual Studio, puede agregar una declaración Contenido de reproducción automática o Dispositivo de reproducción automática en la pestaña Declaraciones. Si está editando el archivo package.appxmanifest de la aplicación directamente, agregue un elemento Extension al manifiesto del paquete que especifica windows.autoPlayContent o windows.autoPlayDevice como Categoría. Por ejemplo, la siguiente entrada en el manifiesto del paquete agrega una extensión de Contenido de reproducción automática para registrar la aplicación como controlador para el evento ShowPicturesOnArrival.

  <Applications>
    <Application Id="AutoPlayHandlerSample.App">
      <Extensions>
        <Extension Category="windows.autoPlayContent">
          <AutoPlayContent>
            <LaunchAction Verb="show" ActionDisplayName="Show Pictures"
                          ContentEvent="ShowPicturesOnArrival" />
          </AutoPlayContent>
        </Extension>
      </Extensions>
    </Application>
  </Applications>