Schnellstart: Behandeln von Kontaktaktionen (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Mit den Namespaces Windows.UI.WebUI und Windows.ApplicationModel.Activation können Sie Daten für eine App bereitstellen, wenn sie für unterschiedliche Kontaktaktionen aktiviert wird (Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs). Hier erfahren Sie, wie Sie die App-Aktivierung behandeln sollten, wenn Benutzer versuchen, einen Kontakt anzurufen, eine Nachricht an einen Kontakt zu senden oder die Karte für die Adresse eines Kontakts aufzurufen. Diese Aktionen zur App-Aktivierung können mithilfe einer Visitenkarte, die über Windows Search aufgerufen wird, oder aus einer App ausgeführt werden. Eine Visitenkarte kann mithilfe der Methoden ContactManager.ShowContactCard und ContactManager.ShowDelayLoadedContactCard aus einer App angezeigt werden. Das Behandeln der App-Aktivierung für Kontaktoptionen wird ab Windows 8.1 unterstützt.

Hier wird auf das Beispiel zum Behandeln von Kontaktaktionen verwiesen. In diesem Beispiel wird veranschaulicht, wie Sie die App-Aktivierung für Kontaktoptionen mithilfe der API des Windows.UI.WebUI-Namespaces aus Windows Store-Apps behandeln.

Das Beispiel umfasst drei Szenarios:

  1. Behandeln einer Aktivierung zum Durchführen eines Anrufs (ContactLaunchActionVerbs.call)
  2. Behandeln einer Aktivierung zum Senden einer Nachricht (ContactLaunchActionVerbs.message)
  3. Behandeln einer Aktivierung zum Zuordnen einer Adresse zur Position auf der Karte (ContactLaunchActionVerbs.map)

Voraussetzungen

  • Wir empfehlen Ihnen, sich mit Microsoft Visual Studio und den zugehörigen Vorlagen vertraut zu machen.
  • Außerdem ist es ratsam, sich mit der JavaScript-Entwicklung vertraut machen.

Einbinden von Manifestregistrierungen für alle Aktionen, die von der App unterstützt werden müssen

Aktualisieren Sie in der Datei AppxManifest.xml oder Package.appxmanifest das Package-Element, um das Windows 8.1-Manifestschema zu akzeptieren und die Manifestregistrierungen für alle Aktionen einzufügen, die von der App unterstützt werden müssen. Mithilfe dieser Registrierungen kann die App gestartet werden, wenn Kontaktaktionen oder Protokollschemas auftreten.

<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>      

Festlegen des auslösenden Szenarios

Die App wird gestartet, wenn der Aktivierungstyp contact oder protocol Windows.ApplicationModel.Activation.ActivationKind auftritt.

Das auslösende Szenario wird von der Kontaktaktion bestimmt, die ausgeführt wird. Wenn Benutzer beispielsweise für die Telefonnummer eines Kontakts auf Anrufen klicken, gilt die Ereignisaktion ContactLaunchActionVerbs.call, und das zu behandelnde Szenario lautet S1-Call.

Da empfohlen wird, dass für Apps mit Implementierung der Aktion Windows.Contact.call auch die Unterstützung für tel: protocol implementiert wird, müssen Sie zusätzlich das Szenario S1-Call behandeln, wenn protocol Windows.ApplicationModel.Activation.ActivationKind erkannt wird.

    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;
        }));
    });

Bereitstellen von Daten für die App, wenn sie per Anruf aktiviert wird

Ermitteln Sie, ob ein Kontaktanrufereignis oder ein tel: protocol-Anrufereignis vorliegt.

Die hier für das Kontaktanrufereignis übergebenen Daten sind ServiceId und ServiceUserId. Im Beispiel wird die Telefonnummer des ausgewählten Kontakts verwendet und beispielsweise folgende Meldung ausgegeben: "Anrufaktivierung empfangen. Die Telefonnummer für den Anruf lautet (555) 555-0100."

Die Daten, die hier für das tel: protocol-Anrufereignis übergeben werden, lauten URI schemeName und path. Im Beispiel wird die Telefonnummer des ausgewählten Kontakts verwendet und beispielsweise folgende Meldung ausgegeben: "Tel: Aktivierung empfangen. Die Telefonnummer für den Anruf lautet (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) {
        }
    });
})();

Bereitstellen von Daten für die App, wenn sie durch das Senden einer Nachricht aktiviert wird

Die hier für das Ereignis zum Senden einer Nachricht übergebenen Daten lauten ServiceId und ServiceUserId. Im Beispiel wird die Benutzer-ID des Kontakts für den jeweiligen Dienst verwendet, und es wird beispielsweise Folgendes ausgegeben: "Aktivierung zum Senden einer Nachricht empfangen. Der zu verwendende Dienst lautet contoso.com. Die Benutzer-ID für die Nachricht lautet 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) {
        }
    });
})();

Bereitstellen von Daten für die App, wenn sie durch die Anforderung der Kartenposition aktiviert wird

Die Daten, die hier für das Ereignis zum Anfordern der Kartenposition übergeben werden, lauten ContactAddress. Im Beispiel wird die Straße des Kontakts verwendet, und es wird beispielsweise Folgendes ausgegeben: "Aktivierung zum Zuordnen einer Adresse empfangen. Die Straße lautet 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) {
        }
    });
})();

Zusammenfassung und nächste Schritte

Sie verfügen jetzt über Grundkenntnisse in Bezug auf die Behandlung der App-Aktivierung für Kontaktaktionen. Laden Sie das Beispiel zum Behandeln von Kontaktaktionen aus der Code Gallery herunter, um das vollständige Beispiel zur Durchführung der App-Aktivierung für Kontaktaktionen zu erhalten.

Verwandte Themen

Beispiel zum Behandeln von Kontaktaktionen