Compartir a través de


Inicio rápido: controlar las acciones de contacto (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Mediante los espacios de nombres Windows.UI.WebUI y Windows.ApplicationModel.Activation, puedes proporcionar datos a una aplicación cuando se activa para diversas acciones de contacto (Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs). Aquí te mostraremos cómo controlar la activación de la aplicación cuando un usuario intenta realizar una llamada telefónica a un contacto, enviarle mensaje a este u obtener la asignación a su dirección. Estas acciones de activación de la aplicación pueden producirse desde una tarjeta de contacto recuperada de la experiencia de Windows Search o desde una aplicación. Puede mostrarse una tarjeta de contacto desde dentro de una aplicación con los métodos ContactManager.ShowContactCard y ContactManager.ShowDelayLoadedContactCard. El control de la activación de la aplicación para acciones de contacto se admite desde Windows 8.1.

Aquí hacemos referencia a la muestra de control de las acciones de contacto. Este ejemplo muestra el modo en que se controla la activación de la aplicación para acciones de contacto mediante la API del espacio de nombres Windows.UI.WebUI desde aplicaciones de la Tienda Windows.

Ofrece tres escenarios:

  1. Controlar una activación para realizar una llamada (ContactLaunchActionVerbs.call)
  2. Controlar una activación para enviar un mensaje (ContactLaunchActionVerbs.message)
  3. Controlar una activación para asignar una dirección (ContactLaunchActionVerbs.map)

Requisitos previos

  • Te recomendamos que estés familiarizado con Microsoft Visual Studio y sus plantillas asociadas.
  • Te recomendamos que estés familiarizado con el desarrollo con JavaScript.

Incluir registros del manifiesto para cada acción que la aplicación tenga que admitir

En el archivo AppxManifest.xml o Package.appxmanifest, actualiza el elemento Package para aceptar el esquema del manifiesto de Windows 8.1 e incluir los registros del manifiesto para cada acción que la aplicación tenga que admitir. Estos registros permiten que se inicie la aplicación cuando se produce alguna de las acciones de contacto o los esquema de protocolo.

<Package xmlns="https://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="https://schemas.microsoft.com/appx/2013/manifest">
.
.
      <Extensions>
        <Extension Category="windows.protocol">
          <Protocol Name="tel"/>
        </Extension>        
        <m2:Extension Category="windows.contact">
          <m2:Contact>
            <m2:ContactLaunchActions>
              <m2:LaunchAction Verb="call">
                <m2:ServiceId>telephone</m2:ServiceId>
              </m2:LaunchAction>
              <m2:LaunchAction Verb="message">
                <m2:ServiceId>skype.com</m2:ServiceId>
              </m2:LaunchAction>            
              <m2:LaunchAction Verb="map"/>
            </m2:ContactLaunchActions>
          </m2:Contact>
        </m2:Extension>
      </Extensions>      

Determinar el escenario en el que se debe actuar

La aplicación se inicia cuando se produce el tipo de activación contact o protocol Windows.ApplicationModel.Activation.ActivationKind.

El escenario en el que se debe actuar está determinado por la acción de contacto que se realiza. Por ejemplo, si el usuario hace clic en Llamar en el número de teléfono de un contacto, la acción del evento es ContactLaunchActionVerbs.call y el escenario en el que se debe actuar es S1-Call.

Dado que recomendamos que las aplicaciones que implementan la acción Windows.Contact.call también implementen compatibilidad para el protocolo , también debes actuar en el escenario S1-Call cuando se detecte protocol Windows.ApplicationModel.Activation.ActivationKind.

    function activated(eventObject) {
        var url = null;
        var arg = null;

        if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.contact) {
            // If activated for a contact, launch the appropriate action handling scenario.
            arg = eventObject.detail;
            if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.call) {
                url = scenarios[0].url;
            } else if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.message) {
                url = scenarios[1].url;
            } else if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.map) {
                url = scenarios[2].url;
            } else {
                WinJS.log && WinJS.log("This app can't handle the contact action verb it was activated for.", "sample", "error");
                return;
            }
        } else if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.protocol) {
            // If activated for a protocol, launch the call scenario
            arg = eventObject.detail;
            url = scenarios[0].url;
        } else if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            // Otherise, navigate to either the first scenario or to the last running scenario
            // before suspension or termination.
            url = WinJS.Application.sessionState.lastUrl || scenarios[0].url;
        }

        if (url !== null) {
            // Use setPromise to indicate to the system that the splash screen must not be torn down
            // until after processAll and navigate complete asynchronously.
            eventObject.setPromise(WinJS.UI.processAll().then(function () {
                return WinJS.Navigation.navigate(url, arg);
            }));
        }
    }

    WinJS.Navigation.addEventListener("navigated", function (eventObject) {
        var url = eventObject.detail.location;
        var host = document.getElementById("contentHost");
        // Call unload method on current scenario, if there is one
        host.winControl && host.winControl.unload && host.winControl.unload();
        WinJS.Utilities.empty(host);
        eventObject.detail.setPromise(WinJS.UI.Pages.render(url, host, eventObject.detail.state).then(function () {
            WinJS.Application.sessionState.lastUrl = url;
        }));
    });

Proporcionar datos a la aplicación cuando se active con una llamada

Determina si estamos recibiendo un evento de llamada de un contacto o un evento de llamada del protocolo .

Los datos pasados aquí para el evento de llamada de contacto son ServiceId y ServiceUserId. En el ejemplo se usa el número de teléfono del contacto seleccionado y se imprime, por ejemplo, "Se recibió la activación de llamada. El número de teléfono al cual llamar es (555) 555-0100".

Los datos pasados aquí para el evento de llamada del protocolo son URI schemeName y path. En el ejemplo se usa el número de teléfono del contacto seleccionado y se imprime, por ejemplo "Se recibió la activación de tel. El número de teléfono al cual llamar es (555) 555-0100".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S1-Call.html", {
        processed: function (element, callArgs) {
            // callArgs is the parameter passed to navigation in the activated event handler.
            if (callArgs) {
                if (callArgs.serviceId) {
                    if (callArgs.serviceId === "telephone") {
                        WinJS.log && WinJS.log("Call activation was received. The phone number to call is " + callArgs.serviceUserId + ".", "sample", "status");
                    } else {
                        WinJS.log && WinJS.log("This app doesn't support calling by using the " + callArgs.serviceId + " service.", "sample", "error");
                    }
                } else if (callArgs.uri) {
                    if (callArgs.uri.schemeName === "tel") {
                        WinJS.log && WinJS.log("Tel: activation was received. The phone number to call is " + callArgs.uri.path + ".", "sample", "status");
                    } else {
                        WinJS.log && WinJS.log("This app doesn't support the " + callArgs.uri.schemeName + " protocol.", "sample", "error");
                    }
                }
            }
        },
        ready: function (element, options) {
        }
    });
})();

Proporcionar datos a la aplicación cuando se activa con un envío de mensaje

Los datos pasados aquí para el evento de envío de mensaje son ServiceId y ServiceUserId. En el ejemplo se usa el id. de usuario del contacto para el servicio en particular y se imprime, por ejemplo, "Se recibió la activación de mensaje. El servicio que debe usarse es contoso.com. El ID de usuario para el mensaje es userid10".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S2-Send-Message.html", {
        processed: function (element, messageArgs) {
            // messageArgs is the parameter passed to navigation in the activated event handler.
            if (messageArgs) {
                WinJS.log && WinJS.log("Send message activation was received. The service to use is " + messageArgs.serviceId + ". The user ID to message is " + 
                messageArgs.serviceUserId + ".", "sample", "status");
            }
        },
        ready: function (element, options) {
        }
    });
})();

Proporcionar datos a la aplicación cuando se activa con una solicitud de asignación

Los datos pasados aquí para el evento de solicitud de asignación de contacto son ContactAddress. En el ejemplo se usa la dirección del contacto y se imprime, por ejemplo, "Se recibió la activación de asignación de dirección. La dirección por asignar es One Microsoft Way".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S3-Map-Address.html", {
        processed: function (element, mapArgs) {
            // mapArgs is the parameter passed to navigation in the activated event handler.
            if (mapArgs) {
                var address = mapArgs.address;
                WinJS.log && WinJS.log("Map address activation was received. The street address to map is " +
                    (address.streetAddress ? address.streetAddress : "unspecified") + ".", "sample", "status");
            }
        },
        ready: function (element, options) {
        }
    });
})();

Resumen y siguientes pasos

Con esto deberías tener nociones básicas sobre cómo controlar la activación de aplicaciones para acciones de contacto. Descarga la muestra de control de las acciones de contacto de la galería de códigos para ver el ejemplo completo de cómo controlar la activación de aplicaciones para acciones de contacto

Temas relacionados

Muestra de control de las acciones de contacto