> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-2-antes-de-comenzar.-el-terreno-de-juego/requerimientos-capacidad-y-declaraciones.md).

# Requerimientos, Capacidades y Declaraciones

Como desarrolladores, lo primero que necesitamos conocer antes de comenzar a desarrollar, es el entorno en el que nos moveremos, es decir, qué capacidades hardware y software ofrecen los dispositivos. También debemos entender las posibilidades y restricciones para poder acceder a las mismas, programarlas y hacer uso de ellas.

## Requisitos hardware

Los dispositivos móviles Windows 10 requieren unas capacidades mínimas para su funcionamiento a fin de obtener las mejores prestaciones. La siguiente tabla muestra cuáles son:

**Tabla 01.- Requisitos mínimos hardware para dispositivos móviles**

| Arquitectura   | Requisitos mínimos                                                                                                                                                                                                                                                                           |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Procesador     | Qualcomm Snapdragon S4 dual-core o superior (hasta quad core).                                                                                                                                                                                                                               |
| Memoria        | <p>1 GB para dispositivos con las siguientes resoluciones:</p><ul><li>960 x 540 (qHD)</li><li>1280 x 720 (HD/720p)</li><li>1280 x 768</li><li>800 x 480 (WVGA) - 854 x 480 (FWVGA)</li></ul><p>2GB para dispositivos FHD (1920 x 1080) y,</p><p>3GB para dispositivos WQHD (2560 x 1440)</p> |
| Almacenamiento | Memoria flash interna de al menos 4 GB.                                                                                                                                                                                                                                                      |
| GPS            | GPS y A-GNSS. Compatibilidad con GLONASS dependiendo de la decisión del fabricante.                                                                                                                                                                                                          |
| micros-USB     | micro-USB 2.0                                                                                                                                                                                                                                                                                |
| Jack           | Entrada de auriculares de 3.5mm con soporte para tres botones.                                                                                                                                                                                                                               |
| Cámara         | <p>Cámara trasera con autoenfoque con flash LED o Xenón opcional.</p><p>Cámara frontal, Opcional. (Ambas VGA o superior),</p>                                                                                                                                                                |
| Sensores       | <p>Acelerómetro,</p><p>Sensores de proximidad e iluminación/luminosidad y motor de vibración.</p><p>Magnetómetro y giroscopio opcionales.</p>                                                                                                                                                |
| Wifi/Bluetooth | Bluetooth y conectividad 802.11b/g. 802.11n opcional.                                                                                                                                                                                                                                        |
| Gráficos       | Soporte hardware para gráficos *DirectX* con aceleración *Direct3D* para GPU programable.                                                                                                                                                                                                    |
| Pantalla       | <p><em>Multi-touch</em> capacitiva con cuatro puntos simultáneos.</p><p>Dispositivos: WVGA, FWVGA, WXGA, qHD, 720p (HD), o 1080p (FHD), WQHD.</p>                                                                                                                                            |
| Botones        | <p>Encendido, volumen y cámara (opcional).</p><p>Inicio, Atrás (o Back) y búsqueda son requeridos para dispositivos WVGA y opcional para el resto, dado que se incluyen en el SO.</p>                                                                                                        |

De igual forma, un PC con Windows 10 demanda algunos requisitos mínimos para su correcto funcionamiento tal y como puede verse en la siguiente tabla:

**Tabla 02.- Requisitos mínimos hardware para Desktop**

| Arquitectura   | Requisitos mínimos                                            |
| -------------- | ------------------------------------------------------------- |
| Procesador     | Procesador de 1 GHz                                           |
| Memoria        | 1GB para Windows de 32 bits y 2GB para Windows de 64 bits     |
| Almacenamiento | 16 GB para Windows de 32 bits y 20GB para Windows de 64 bits. |
| Gráficos       | Compatible con DirectX 9 y controlador WDDM                   |
| Pantalla       | Dispositivos SVGA (800 x 600) o superiores.                   |

Para más detalle sobre requisitos mínimos, visitar la página: <https://msdn.microsoft.com/es-es/windows/hardware/commercialize/design/minimum/minimum-hardware-requirements-overview>.

## Multiresolución y tamaño de pantalla

Windows 10, soporta multitud de resoluciones y tamaños de pantallas diferentes que pueden variar entre las 4”, 5”, 12”, 48”, 84” etc. Por tanto, la combinación entre resolución y tamaño de pantalla puede dar lugar a multitud de dispositivos.

Además de estos valores, debemos contar con el factor de escala (o escalado), el cual indica cómo se calcula la resolución eficaz.

En la siguiente imagen podemos ver estos tamaños aplicados a distintos tipos de dispositivos.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-4903a4de6fcff8ee450ae116d59b10c140f7c7a0%2Fimage2.png?alt=media)

**Figura 02.- Tamaños de pantalla por dispositivo**

Para más información sobre el tamaño y resolución, así como otras características sobre los mismos visitar la página: <https://msdn.microsoft.com/es-es/library/windows/apps/dn958437.aspx>

### Puntos de interrupción para una IU dinámica

El número de dispositivos y tamaños de pantalla de Windows 10 es demasiado grande para preocuparse de optimizar la IU para cada uno de ellos. En lugar de eso, lo recomendable es hacer el diseño pensando en tres anchos clave (también llamados puntos de interrupción): 320, 720 y 1024 píxeles efectivos.

**Tabla 03.- Puntos de interrupción clave para una interfaz dinámica**

| Tamaño                                  | Pequeño    | Mediano                               | Grande                    |
| --------------------------------------- | ---------- | ------------------------------------- | ------------------------- |
| Ancho en píxeles efectivos              | 320        | 720                                   | 1024                      |
| Tamaños comunes de pantallas (Diagonal) | De 4” a 6” | De más de 6" a 12"                    | 13” y más                 |
| Dispositivos comunes                    | Teléfonos  | Tabletas, teléfonos con gran pantalla | PC, portátil, Surface Hub |

Para más información: <https://docs.microsoft.com/es-es/windows/uwp/layout/screen-sizes-and-breakpoints-for-responsive-design>.

### Capacidades o características

Los **requerimientos o características hardware y software** son usados para garantizar que sólo aquellos dispositivos con ciertas capacidades podrán ejecutar la aplicación. Éstas son indicadas mediante entradas en el fichero de manifiesto de la aplicación *Package.appxmanifest*. Son definidas en dicho manifiesto e indican al usuario, durante la instalación, los requisitos hardware o software que la aplicación usará: Calendario, contactos, localización, etc.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-656553f36b6c14296d9c1e14b7e8c63aa9340704%2Fimage3.png?alt=media)

**Figura 03.- Capacidades a utilizar por la aplicación**

Para más detalle sobre las capacidades visitar la página: <https://msdn.microsoft.com/es-es/windows/uwp/packaging/app-capability-declarations>.

### Declaraciones. Contratos y Extensiones

Las aplicaciones usan **contratos** y **extensiones** para exponer interacciones con otras aplicaciones. Para ello, éstas deben incluir **declaraciones** requeridas en el manifiesto y llamar a las APIs necesarias para comunicarse con las otras aplicaciones del contrato.

**Contrato**. Es un acuerdo entre una o más aplicaciones que definen los requisitos que las aplicaciones deben cumplir para participar en estas interacciones y donde cada una de ellas no tiene por qué conocer nada acerca de la otra.

**Extensión**. Es un acuerdo entre una aplicación y el sistema operativo permitiendo extender o personalizar características estándares. Principalmente, para su uso en las aplicaciones que desarrollemos y, potencialmente, para su uso en otras aplicaciones.

La siguiente tabla muestra un listado de estas declaraciones.

**Tabla 04.- Declaraciones disponibles**

| Declaración                 | Descripción                                                                                                                                                                                                                                                                                              |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account Picture Provider    | Extensión para la configuración de la imagen de la cuenta con la que el usuario está registrado en el dispositivo.                                                                                                                                                                                       |
| Alarm                       | La aplicación se declara como alarma del sistema.                                                                                                                                                                                                                                                        |
| App Service                 | Servicio de aplicaciones. Tareas en segundo plano que permite a las aplicaciones comunicarse entre sí.                                                                                                                                                                                                   |
| Appointments Provider       | Capacidad para interactuar con la API de calendario y creación de citas                                                                                                                                                                                                                                  |
| AutoPlay Content            | Reproducción automática de contenido. Extensión que permite a la aplicación mostrarse como una opción de reproducción automática.                                                                                                                                                                        |
| AutoPlay Device             | Extensión que permite a la aplicación aparecer como una opción de reproducción automática al conectar el dispositivo a un ordenador con Windows.                                                                                                                                                         |
| Background Tasks (\*)       | <p>Tareas en segundo plano que permiten la ejecución de la aplicación incluso cuando ésta se encuentra suspendida. Son dedicadas a pequeños trabajos que no requieren la interacción del usuario.</p><p>Podrán ser implementadas más de una de ellas en una misma aplicación al soportar multitarea.</p> |
| Cached File Updater         | Similar a un repositorio central de ficheros con el fin de realizar un seguimiento y mantenimiento de los mismos. Puede proporcionar diferentes versiones de archivos.                                                                                                                                   |
| Camera Settings             | Configuración de la cámara. Extensión que permite a la aplicación aparecen en el menú desplegable “Más opciones” de la cámara del dispositivo.                                                                                                                                                           |
| Certificates                | Extensión que permite instalar un certificado digital con la aplicación. Certificado utilizado para la comunicación segura (SSL) con servicios web.                                                                                                                                                      |
| Dial Protocol (\*)          | Permite ejecutar aplicaciones en la Xbox One si el dispositivo se encuentra en red. En caso contrario y gracias a esta extensión, es posible utilizar el acceso telefónico para instalarla previamente.                                                                                                  |
| File Open Picker            | Da al usuario la libertad y la flexibilidad de elegir entre aquellos archivos que previamente han sido almacenados por las aplicaciones.                                                                                                                                                                 |
| File Save Picker            | Da al usuario la libertad y la flexibilidad de guardar archivos para que puedan ser consultados por otras aplicaciones.                                                                                                                                                                                  |
| File Type Associations (\*) | Asocia una extensión específica de un archivo a una aplicación.                                                                                                                                                                                                                                          |
| Lock Screen                 | Permite al usuario realizar ciertas interacciones con el dispositivo cuando éste está bloqueado.                                                                                                                                                                                                         |
| Media Playback              | Indica a la aplicación que es compatible con la reproducción de DVD.                                                                                                                                                                                                                                     |
| Personal Assistant Launch   | Permite la interacción con Cortana, nuestro asistente personal.                                                                                                                                                                                                                                          |
| Pre-installed Configuration | Tarea de configuración preinstalada. Inicia una tarea de actualización sin interacción del usuario para asegurar la actualización.                                                                                                                                                                       |
| Print 3D Workflow           | Flujo de trabajo de impresión 3D. Permiten a los fabricantes de impresoras 3D proporcionar una aplicación para aportar una experiencia exclusiva en el cuadro de diálogo de impresoras 3D. En su defecto se muestra el cuadro de diálogo predeterminado.                                                 |
| Print Task Settings         | Permite a los fabricantes habilitar personalizar el menú desplegable que muestra la configuración avanzada de impresión.                                                                                                                                                                                 |
| Protocol (\*)               | Asocia un esquema URI a una aplicación para que ésta pueda manejarlos. De esta manera una aplicación podrá ser activada/invocada desde sí misma o desde otra en base a este esquema URI.                                                                                                                 |
| Restricted Launch           | Registra la aplicación en el proveedor de búsqueda para permitir a otras aplicaciones que puedan realizar búsqueda de contenido en esta aplicación.                                                                                                                                                      |
| Search                      | Accede al contenido de otras aplicaciones durante una búsqueda y permite a ambas buscar contenido entre ellas.                                                                                                                                                                                           |
| Share Target                | <p>Permite a una aplicación compartir contenido con otra y viceversa.</p><p>Los formatos soportados son, por ejemplo: <em>Text, URI, Bitmap, HTML, StorageItems</em> o <em>RTF</em>.</p>                                                                                                                 |
| Web Account Provider        | Permite al usuario realizar inicio de sesión único (SSO) además de la convergencia de las múltiples identidades que soportan SSO.                                                                                                                                                                        |

(\*) Es posible definir más de una instancia por aplicación.

Todas estas declaraciones requieren de una serie de **propiedades** adicionales para su configuración y funcionamiento. Entre ellas, se encuentran, las siguientes con algunas particularidades:

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-1c9d918384ee1b7e935182a09cc5f6542b3d8d0a%2Fimage4.png?alt=media)

**Figura 04.- Propiedades comunes de las declaraciones**

* Ejecutable. Ejecutable (.EXE) de inicio de la aplicación. Por defecto, su valor estará vacío tomando así el valor del propio ensamblado.
* Punto de entrada (o *Entry Point*). Namespace y Clase en la que se encuentra el código a ejecutar al activarse el contrato. Para algunas declaraciones este valor se encontrará vacío, por lo que su valor será implícitamente el de la clase *App* del propio proyecto, es decir, “ElGuerre.TaskIn.App”. Para proyectos de tipo WinJS este valor coincidirá con el nombre del fichero Javascript (.js) que implementa el código de la tarea en segundo plano.
* Página de inicio (*o Start Page*). Página HTML de inicio indicada particularmente para aplicaciones basadas en *WinJS* (Java Script + HTML 5 + CSS).
* Grupo de recursos (*o Resource group*). Etiqueta que se puede utilizar para agrupar extensiones de activaciones con fines de administración.

Para una declaración de tipo, **Tarea en Segundo Plano (*****Background Tasks)***, se especificará al menos, un tipo de tarea, y un valor para su propiedad punto de entrada (*Entry Point*), indicando así, la clase que ejecutará el código de la misma. La sección “Tareas en segundo plano” de este mismo capítulo muestra en detalle su funcionamiento y los pasos para la creación y ejecución.

Una **declaración de tipo** **Protocolo**, requiere el valor de su propiedad **nombre** (ej.: Task\[in]) y la sobrescritura del método *OnActivated*, de la clase *App.xaml.cs.*

```
protected override void OnActivated(IActivatedEventArgs args)
{
  if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Protocol)
  {
    //...
  }
}
```

De esta manera, cualquier invocación a una URI del tipo *taskin://* ejecutará la aplicación. El resto de la URI variará según las necesidades de la aplicación y los parámetros deseados para que el evento anterior, *OnActivated*, pueda disponer de toda la información necesaria. Por ejemplo, en el caso de una URI, *taskin://projects/nnn*, la aplicación abriría la página de detalle de proyectos para el identificador “nnn”.

Es necesario saber, que existen nombres para las declaraciones de protocolos que no pueden ser usados por hallarse reservados: *application.manifest, internetshortcut, ms-settings:network, mobilehotspot, shbfile,application.reference, javascript, ms-settings:network-proxy, shcmdfile,* etc. Para más detalle sobre ellos visitar la página: <https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/reserved-uri-scheme-names>

Para el caso de una **declaración de tipo** **compartir (*****Shared Target***), se indicarán los diferentes tipos de formatos y se sobrescribirá el evento *OnShareTargetActivated*, de la clase *App.xaml.cs* tal y como se indica a continuación:

```
protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
  if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.ShareTarget)
  {
    //...
  }
  base.OnShareTargetActivated(args);
}
```

{% hint style="info" %}
**Nota**: Los eventos *OnActivated*, *OnShareTargetActivated*, así como: *OnCachedFileUpdaterActivated, OnFileActivated, OnFileOpenPickerActivated* y *OnFileSavePickerActivated*, definidos en la clase *App.xaml.cs*, son utilizados de la misma manera para la activación de sus respectivas declaraciones.
{% endhint %}

Para más información visitar la página: <https://msdn.microsoft.com/es-es/library/windows/apps/hh464906.aspx>
