Neues Werkzeug braucht das Land

Windows Phone 8.1 – Was Entwickler wissen müssen
Kommentare

Mit Windows Phone 8.1 löst Microsoft ein Versprechen ein. Das Mobilbetriebssystem unterstützt ab sofort das komplette Windows Runtime API, wodurch sich – zumindest in der Theorie – plattformübergreifende Applikationen realisieren lassen.

Im Hintergrund von Windows Phone 8 wurde der von Windows Phone 7 verwendete proprietäre Kernel durch eine „standardkonformere“ Version ersetzt. Diese hatte mehr Ähnlichkeiten zu den Betriebssystemkernen von Windows und Windows RT – als Fernziel wurde die Vereinheitlichung der Programmierschnittstellen angegeben.

Mit Windows Phone 8.1 löst Microsoft dieses Versprechen nun ein. Das Mobilbetriebssystem unterstützt ab sofort das komplette Windows Runtime API, wodurch sich – zumindest in der Theorie – plattformübergreifende Applikationen realisieren lassen. Natürlich wird es auch in Zukunft einige Funktionen geben, die nur auf bestimmten Gerätetypen sinnvoll sind – im Großen und Ganzen soll jedoch „Einigkeit“ herrschen.

Leider werden im Rahmen dieser Umstellung einige „Opfer“ notwendig. Die unter Windows Phone 8.0 zur Verfügung stehenden APIs laufen fortan unter der Bezeichnung „Silverlight“. Darauf basierende Programme lassen sich zwecks Abwärtskompatibilität zu Windows Phone 7 bzw. 8 nach wie vor entwickeln, sind aber über kurz oder lang Auslaufmodelle.

Neues für den Anwender

Nutzer interessieren sich normalerweise nicht für Betriebssystemupdates. Im Fall von Windows Phone 8.1 dürfte die Lage etwas anders aussehen, da das System einige sehr nützliche Features mitbringt. Das Betriebssystem war Android und iOS bisher unterlegen, da es ohne leistungsfähige Spracherkennung auskommen musste. Microsofts Antwort auf Siri und Google Now hört auf den Namen Cortana, und ist – vorerst – nur in Amerika verfügbar. Analysten bescheiden dem Programm in ersten Tests durchaus beachtliche Performance; bis zum Europastart im Jahr 2015 dürfte Redmond die verbliebenen Schwächen ausmerzen.

Action Center wurde ebenfalls von der Konkurrenz „übernommen“. Es handelt sich dabei um eine durch einen umgekehrten Ronamatic Stroke aufrufbare Anzeigefläche, die – wie in Abbildung 1 gezeigt – eingehende Ereignisse anzeigt.

Abb. 1: Hier ist die Abarbeitung einer eingehenden Nachricht notwendig

Abb. 1: Hier ist die Abarbeitung einer eingehenden Nachricht notwendig

Windows Mobile erlaubte seinen Benutzern die Zuweisung eines beliebigen Hintergrundfotos. Windows Phone 8.1 bringt dieses Feature – wenn auch in stark abgeschwächter Form – zurück. Der neue Homescreen hinterlegt die Kacheln von kooperativen Programmen mit einem ausgewählten Fotomotiv, was zum in Abbildung 2 gezeigten Resultat führt.

Abb. 2: Wenn ein Programm keine Hintergründe unterstützt, so wird das Wallpaper „unterbrochen“

Abb. 2: Wenn ein Programm keine Hintergründe unterstützt, so wird das Wallpaper „unterbrochen“

Im Bereich der Tastatur schließt man ebenfalls zur Konkurrenz auf. Nutzer dürfen ihr Telefon ab sofort mit den von Swype und TouchPal bekannten Gesten traktieren, wodurch das mühevolle und zeitaufwändige Antippen der einzelnen Zifferntasten entfällt.

Zu guter Letzt gibt es diverse kleine Änderungen. Nutzer wünschten sich in der Vergangenheit die Möglichkeit zur separaten Einstellung von Medien- und Klingeltonlautstärke – ein Feature, das von Seiten Microsofts nachgerüstet wird.

Achtung: WiFi Sense teilt ihre WLAN-Zugangsdaten

Die Nutzung von WLAN gewann in den letzten Jahren stark an Bedeutung. Die Basisversion eines WiFi Sense genannten Diensts erleichtert Ihnen den Verbindungsaufbau zu öffentlichen Netzwerken. Auf Wunsch füllt der Service sogar die AGB-Formulare mit von Microsoft vorgegebenen Dummy-Daten.
Hinter der markierten Checkbox verbirgt sich ein weit sinistreres Feature. Sobald Sie den Haken an dieser Stelle setzen, teilt Windows Phone die Zugangsdaten aller eingegebenen Netzwerke mit den im jeweiligen sozialen Netzwerk befindlichen Freunden. Microsoft verspricht zwar, dass diese keinen Zugriff auf das Password bekommen – dies ist insofern irrelevant, als sie mit einem in ihrem Funknetzwerk marodierenden Windows Phone ausreichend Schaden anrichten können.

Neues Werkzeug braucht das Land

Die SDKs für Windows Phone wurden bisher als modulares Paket angeboten: Wer die Binärdatei herunterlud, bekam IDE, SDK und Emulatoren auf einen Satz. 8.1 wird stattdessen in modularer Form heruntergeladen. Wer die  SDK-Downloadseite besucht, bekommt drei voneinander unabhängige Komponenten angeboten.

Als Erstes muss – normalerweise – Visual Studio 2013 Express for Windows auf Ihren Rechner. Die bisher für Windows Phone vorgesehene „Spezialversion“ der IDE ist nicht mehr notwendig, da das System ja auf der gemeinsamen Windows Runtime basiert. Wenn Sie eine frühere Version von VS2013 installiert haben, so müssen Sie stattdessen das ebenda angebotene Updatepaket installieren. Als letzten Akt können Sie – bei Bedarf – die eher gemächlich arbeitenden Emulatoren nachschieben. Microsoft hat sie mit einigen neuen Features ausgestattet, die im folgenden Abschnitt im Detail besprochen werden. Wer das SDK direkt mit dem Installer auf seinen Rechner jagt, erspart sich das Hantieren mit diesem Paket.

Falls Ihr Netzbetreiber bzw. Ihr Gerätehersteller das für Sie notwendige Update noch nicht freigegeben hat, so müssen Sie die Developer Preview installieren. Dabei geht – wie schon bei Mango und Tango – die Herstellergarantie verloren, was in der Praxis aber ohne besondere Relevanz ist. Wenn Sie als Entwickler angemeldet sind, können Sie eine als „Developer Preview“ bezeichnete Applikation aus dem Store auf Ihr Telefon herunterladen. Folgen Sie danach den am Bildschirm angezeigten Anweisungen, um den Installationsprozess anzustoßen. Je nach Grad der Aktualität Ihres Handys sind mitunter mehrere Updatevorgänge notwendig.

Geänderte Projektstruktur

Wer Visual Studio 2013 zum ersten Mal startet, findet im Projekterstellungs-Wizard diverse neue Vorlagen. Nach dem Erstellen einer Solution vom Typ „Blank App (Universal)“ dürfen Sie sich an einer aus mehreren Subprojekten bestehenden Solution erfreuen. Jedes von ihnen ist – frei nach der von XNA bekannten Vorgehensweise – für eine Plattform zuständig.

Die Auswahl des zu debuggenden Projekts erfolgt durch einen Rechtsklick und die Wahl der Option „Set as StartUp Project“. Visual Studio stellt den Namen der Projektmappe ab diesem Zeitpunkt fett dar, die Inhalte der Debugging-Schaltflächen in der Toolbar werden ebenfalls angepasst.

Beachten Sie bitte, dass Sie es in VS2013 – anders als in XNA – mit zwei komplett verschiedenen Lösungen zu tun haben: Alle Dateien sind auf der Festplatte in zwei Versionen verfügbar, Änderungen an einer der beiden werden nicht automatisch auf die andere gespiegelt. Gemeinsame Logik lässt sich nur durch das Anlegen einer Klassenbibliothek erstellen. Dazu müssen Sie Ihre Projektmappe um ein drittes Subprojekt erweitern, auf das von Seiten der beiden GUI-Projekte verwiesen wird.

Teste mich

Windows Phone 7 erfreute Entwickler mit einem schnell reagierenden Simulator. Seit der achten Version des Betriebssystems setzt Microsoft auf einen Emulator mit Hardwarevirtualisierung, was der Performance alles andere als zuträglich ist. Kurz gefasst: Wer mit einem echten Telefon testen kann, sollte dies auf jeden Fall tun. Die Emulatoren bekamen trotzdem einige neue Funktionen. Der Multi-Touch-Simulator erlaubt Ihnen das Nachbilden von Zweifingergesten mit der Maus: Die nach dem Anklicken der Hand erscheinenden „Zugpunkte“ müssen nacheinander verschoben werden, um Swipes oder Pinches zu simulieren.

Hinter den Windows Phone Developer Power Tools verbirgt sich eine Gruppe von Werkzeugen, die auf die Fehlersuche spezialisiert sind. Der Application Verifier analysiert nativen Code während seiner Ausführung auf „klassische“ Fehler wie das Überschreiten von Arraygrenzen. Wichtig ist, dass es sich dabei nicht um ein statisches Analysetool handelt: Wenn der fehlerhafte Teil während des Tests nicht abgearbeitet wird, so kann ihn der Application Verifier nicht erkennen. Performance Monitor und Performance Recorder analysieren den Systemzustand. Der Recorder erinnert an die in der MMC enthaltene Systemüberwachung, die Informationen zu Datenträgerbelastung und ähnlichen Eigenschaften des Gesamtsystems liefert. Mit dem Performance Monitor können Sie das Verhalten eines einzelnen Prozesses näher unter die Lupe nehmen.

Gemeinsame Steuerelemente

Seit der Einführung von XAML wird Data Binding bei Microsoft als Quasistandard betrachtet: Die unter Visual Basic 6 als „zum guten Ton“ gehörende Regel mit dem leeren Code-Behind ist für die Realisierung von effizient portierbaren Applikationen unerlässlich. Leider setzt effektives Data Binding voraus, dass alle Plattformen ähnliche Steuerelemente mitbringen. Mit Windows Phone 8.1 erfolgt die Umstellung auf das schon von Windows-Store-Apps bekannte Widget-System. Bei den meisten Steuerelementen sind die Unterschiede zur Vorgängerversion vergleichsweise gering, der Hub wurde in Panorama umbenannt.

Falls Sie weitere Informationen zu den einzelnen Widgets benötigen, so sollten Sie die hier einsehbare Steuerelementliste konsultieren.

Automatische Datenteilung…

ASUS verdient mit seinem PadFone-Konzept gutes Geld. Die Geräte bestehen aus einem Smartphone, das sich nach dem Andocken in eine Basisstation in ein Tablet verwandelt. Nutzer akzeptieren den Mehrpreis im Allgemeinen ohne Probleme, da die manuelle Synchronisation der Daten ersatzlos entfällt.

Ein als Roaming bezeichneter Dienst – der Name ist aus SEO-technischer und psychologischer Sicht ungünstig gewählt – erlaubt Entwicklern den Austausch kleinerer Datenmengen zwischen mehreren Geräten. Als einzige Voraussetzung dafür nennt Microsoft die Anmeldung mit einem Microsoft-Account – wer sich mit einem lokalen Konto anmeldet, kann die Vorteile des Diensts nicht oder nur sehr eingeschränkt nutzen.

Zum Datenaustausch stehen ein dedizierter Ordner und ein Settings-KV-Store zur Verfügung. Beide lassen sich über in Windows.Storage.ApplicationData befindliche Akzessoren ansprechen:

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
Windows.Storage.StorageFolder roamingFolder = 
Windows.Storage.ApplicationData.Current.RoamingFolder;

Roaming ist – von der Implementierung her – geradezu primitiv. Konfigurationsdaten werden in den jeweiligen Ordner geschrieben und dort später wieder ausgelesen. Windows kümmert sich im Hintergrund transparent um den Austausch der Informationen.

Wenn von Seiten des Servers Änderungen anfallen, so wird ein DataChanged-Event abgefeuert. Ihre Applikation muss einen Event Handler einschreiben, der das Roaming-Verzeichnis ausliest und die Daten in Ihre Applikation zurückschreibt (Listing 1).

Listing 1

Windows.Storage.ApplicationData.Current.DataChanged += 
        new TypedEventHandler&ltApplicationData, object&gt(DataChangeHandler);
void DataChangeHandler(Windows.Storage.ApplicationData appData, object o)
{
  ...
}

…mit lästigen Schwächen

Die Synchronisation der Daten erfolgt opportunistisch. Das bedeutet, dass der Dienst für „aktuelle“ Informationen nicht oder nur wenig geeignet ist. Eventuelle Konflikte werden durch das Last-in-Prinzip gelöst: Die zuletzt geschriebene Änderung ist die, die auf den Server wandert.

Am Tablet oder am Desktop laufende Applikationen dürfen eine bis zu 8 KB große Eigenschaft als besonders wichtig kennzeichnen, um so eine schnellere Reaktionszeit zu „erbitten“. Am Windows Phone werden die Daten zwar synchronisiert, der Schlüssel bekommt aber keine bevorzugte Behandlung: roamingSettings.values[„HighPriority“] = „65“;

Microsoft sichert Roaming durch diverse Fair-Use-Prüfungen gegen Missbrauch ab. Der maximal verfügbare Speicherplatz lässt sich durch die Methode RoamingStorageQuota abfragen. Wenn der Nutzer nicht angemeldet ist, so liefert stattdessen Windows.Storage.ApplicationData.Current.RoamingStorageQuota. Dieser liefert solange Null, bis Sie Ihre Applikation in beiden Store-Backends anmelden – im Moment bekommt jedes Programm 100 KB Speicherplatz zugewiesen.

Aus geschäftstaktischen Gründen gibt es aus Redmond keinerlei Angaben zur maximalen Aktualisierungsfrequenz – in der Dokumentation findet sich nur der lapidare Hinweis, dass Aktualisierungen maximal alle fünf Minuten (und beim Suspenden) erfolgen sollten. Für Sie als Entwickler ist dies insofern ärgerlich, als dass das Roaming beim Überschreiten der Speicher- und/oder der Aktualisierungsgrenzen die Arbeit kommentarlos einstellt. Das Finden von Fehlern im hauseigenen Code wird dadurch wesentlich erschwert; als einziges Zugeständnis können Entwickler ihr bei Microsoft angemeldetes Gerät sperren, um so eine „schnelle“ Synchronisation zu erzwingen.

Daten raus

Größere Datenmengen lassen sich durch Nutzung eines von einem Drittanbieter angemieteten Servers austauschen: Der Roaming-Dienst dient in diesem Fall nur zum Mitteilen des URL. Für die eigentliche Übertragung der Daten bietet sich das BackgroundTransfer-API an. Es tauscht Daten im Hintergrund über HTTP und HTTPS aus, FTP wird nur zum Herunterladen von Dateien unterstützt. Die Background-Transfers laufen auch dann weiter ab, wenn das Programm nicht mehr im Vordergrund ist.

Wichtig ist, dass die als Kostenpolice übergebenen Werte nicht unbedingt vom Betriebssystem beachtet werden. Das genaue Verhalten lässt sich aus den in der Dokumentation enthaltenen Tabellen ableiten.

Zaun im Land

Geofencing ist per se kein neues Konzept. Diverse Gadgets – Stichwort Schlüssel-Verlust-Verhinderer – arbeiten seit Jahren mit einem ähnlichen Konzept. Wenn das zu schützende Teil den „legalen“ Bereich verlässt, so gibt es Radau. Ein Geofence arbeitet ähnlich: Nach seiner Deklaration reagiert er, wenn der Nutzer in der als „heiß“ markierten Zone auftaucht. Dank eines Background-Listeners kann Ihr Programm sogar dann auf Ereignisse reagieren, wenn es im Hintergrund liegt.

Die Grundstruktur eines Geofences lässt sich anhand des in Listing 2 gezeigten Beispiels nachvollziehen, das aus der MSDN übernommen wurde.

Listing 2

private void CreateGeofence()
{
  Geofence geofence = null;

  string fenceKey = new string(Id.Text.ToCharArray());

  BasicGeoposition position;
  position.Latitude = Double.Parse(Latitude.Text);
  position.Longitude = Double.Parse(Longitude.Text);
  position.Altitude = 0.0;
  double radius = Double.Parse(Radius.Text);

  // the geofence is a circular region
  Geocircle geocircle = new Geocircle(position, radius);

  bool singleUse = (bool)SingleUse.IsChecked;

  // want to listen for enter geofence, exit geofence and remove geofence events
  // you can select a subset of these event states
  MonitoredGeofenceStates mask = 0;

  mask |= MonitoredGeofenceStates.Entered;
  mask |= MonitoredGeofenceStates.Exited;
  mask |= MonitoredGeofenceStates.Removed;

  // setting up how long you need to be in geofence for enter event to fire
  // TimeSpan dwellTime;

  if ("" != DwellTime.Text)
  {
    dwellTime = new TimeSpan(ParseTimeSpan(DwellTime.Text, defaultDwellTimeSeconds));
  }
  else
  {
    dwellTime = new TimeSpan(ParseTimeSpan("0", defaultDwellTimeSeconds));
  }

  // setting up how long the geofence should be active TimeSpan duration;

  if ("" != Duration.Text)
  {
    duration = new TimeSpan(ParseTimeSpan(Duration.Text, 0));
  }
  else
  {
    duration = new TimeSpan(ParseTimeSpan("0", 0));
  }

  DateTimeOffset startTime;
  calendar.SetToNow();
  startTime = calendar.GetDateTime();

  geofence = new Geofence(fenceKey, geocircle, mask, singleUse, dwellTime, startTime, duration);
  GeofenceMonitor.Current.Geofences.Add(geofence);

}

Microsofts Geofence-Engine beeindruckt Entwickler mit hoher Flexibilität. Das Produkt kann sowohl beim Betreten als auch beim Verlassen eines Geofences Ereignisse abfeuern und kennt zudem das Konzept der „Wartezeit“. Das bedeutet, dass der Nutzer die Events erst nach einer gewissen Aufenthaltszeit auslöst – ein nicht nur im Fall von kleinen Messfehlern immens nützliches Feature.

Karten offline nutzen

Symbian OS zeichnete sich – auf von Nokia hergestellten Geräten – durch seine hervorragende Kartenapplikation aus, die sich auch ohne bestehende Internetverbindung nutzen ließ. Mit Windows Phone 8.1 können ihre User Kartendaten herunterladen, um diese später ohne Internetverbindung anzuzeigen.

Die Verwaltung dieser Kartenkacheln erfolgt über als eine MapManager bezeichnete Klasse. Sie exponiert zwei statische Methoden, deren Aufruf ihre Applikation beendet und stattdessen die Kartenverwaltung öffnet. MapManager.ShowDownloadedMapsUI() erlaubt das Herunterladen von neuen Karten, während MapManager.ShowMapsUpdateUI() eine Liste der schon am Telefon befindlichen Karten anzeigt.

Wichtig ist, dass Navigation und POI-Suche nach wie vor eine bestehende Internetverbindung voraussetzen. Beachten Sie außerdem, dass der Nutzer Ihr Programm nach dem Aufruf einer der beiden Methoden von Hand neu starten muss.

Willkommen im Action Center

Das im Abschnitt zu User-Features besprochene Action Center lässt sich um Ereignisse erweitern, die im Rahmen ihrer Applikation anfallen. Windows Phone 8.1 listet dort bis zu 20 Events auf, die nach dem FIFO-Prinzip durch neue Daten verdrängt werden. Daraus folgt, dass Sie den Toast Manager nicht unbedingt als einzige Anzeigequelle für lebenswichtige Daten nutzen sollten.

Microsoft definiert in einer als „Toast Template Catalog“ bezeichneten Auflistung eine Vielzahl möglicher Designs. Leider wird unter Windows Phone nur die als „ToastText02“ bezeichnete Vorlage unterstützt, die zu den in Abbildung 3 gezeigten Resultaten führt.

Abb. 3 ToastText02 führt zu optisch unaufdringlichen Toasts (Bildquelle: Microsoft)

Abb. 3 ToastText02 führt zu optisch unaufdringlichen Toasts (Bildquelle: Microsoft)

Für das eigentliche Absenden der Notification ist Code nach dem in Listing 3 gezeigten Schema notwendig.

Listing 3

ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
            toastTextElements[0].AppendChild(toastXml.CreateTextNode("Titel"));
            toastTextElements[1].AppendChild(toastXml.CreateTextNode("Text"));
IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
 ((XmlElement)toastNode).SetAttribute("duration", "long");
ToastNotification toast = new ToastNotification(toastXml);
toast.SuppressPopup = false;
toast.Failed += (o, args) =&gt
{
  var message = args.ErrorCode;
};
ToastNotificationManager.CreateToastNotifier().Show(toast); 

Windows Mobile versorgte Entwickler mit einem Canvas-Zeiger, der die Realisierung des Inhalts des jeweiligen Homescreen-Plug-ins ermöglichte. Da dies aufgrund fehlerhafter Umsetzungen mancher Entwickler zu Performanceproblemen führte, wählte man in Redmond für Windows Phone 8.1 einen anderen Weg.

Toasts bestehen aus XML, das von einer im Betriebssystem enthaltenen Engine für die Anzeige aufbereitet wird. Unser Beispielprogramm beginnt mit der Beschaffung einer Vorlage, die im nächsten Schritt mit einem XML-Parser mit Inhalten versehen wird. Nach der erfolgreichen Parametrierung rufen wir den ToastNotificationManager auf, der das Element auf den Bildschirm schiebt.

Wir zeigen hier aus didaktischen Gründen zwei weitere Besonderheiten. Die Übergabe eines Event Handlers ermöglicht das Abrufen von Informationen über eventuelle Anzeigefehler. Wer SuppressPopup auf „true“ setzt, schreibt den Toast direkt in das Action Center – das normalerweise erscheinende Toast-Fenster wird in diesem Fall unterdrückt.

Vor der Ausführung des Snippets müssen Sie das Manifest der Applikation anpassen, um das Betriebssystem über die Intention des Toast-Verschickens aufzuklären. Die dazu notwendige Einstellung findet sich im Karteireiter Application | Notifications | Toast Capable. Einmal gesendete Toasts lassen sich durch die Nutzung diverser API-Funktionen verwalten. Weitere Informationen zur ToastHistory-Klasse finden Sie bei Microsoft.

Wallet herbei

Die Wallet-Applikation müsste eigentlich als userorientiertes Feature gelten: Aufgrund der eher geringen Verbreitung sollten Sie sie jedoch eher als Gimmick für sehr interessierte Nutzer betrachten. Es handelt sich dabei um ein Programm, das seinem User wie in Abbildung 4 gezeigt eine Übersicht über Konten, Gutscheine und Boarding-Pässe gibt.

Abb. 4: Im Microsoft-Account des Nutzers ist etwas Kleingeld enthalten (Quelle: Microsoft)

Abb. 4: Im Microsoft-Account des Nutzers ist etwas Kleingeld enthalten (Quelle: Microsoft)

Einträge bestehen – ganz analog zu echten Kundenbindungskarten – aus einer Vorder- und einer Rückseite. Die Front enthält normalerweise eine ästhetisch präsentierte Übersicht der Features, während die Rückseite diverse Interaktionsmöglichkeiten offeriert (Abb. 5 und 6).

Abb. 5: Wallet lässt Ihnen beim Design der Vorderseite weitgehend freie Hand … (Quelle: Microsoft)

Abb. 5: Wallet lässt Ihnen beim Design der Vorderseite weitgehend freie Hand … (Quelle: Microsoft)

Abb. 6: … während auf der Rückseite „formellere“ Kriterien beachtet werden sollten (Quelle: Microsoft)

Abb. 6: … während auf der Rückseite „formellere“ Kriterien beachtet werden sollten (Quelle: Microsoft)

Wallet lässt sich durch zwei verschiedene Schnittstellen mit Inhalten versorgen. Eine schon auf dem Telefon befindliche App sollte die Wallet-APIs nutzen, die hier im Detail beschrieben sind. Alleinstehende .mswallet-Dateien können per E-Mail oder als Download zum Nutzer gelangen und dienen zur Einpflege statischer Inhalte wie dem in der Einleitung erwähnten Boarding-Pass.

Screenshots per Automat

Wer sein Windows Phone nach dem Update zu einem Screenshot animieren möchte, wird stattdessen mit einer freundlichen Fehlermeldung besehen. Das liegt daran, dass Microsoft die Tastenkombination geändert hat – Screenshots entstehen fortan über Volume Up + Power.

Für Spieleentwickler ist das ScreenCapture-API interessant. Es erlaubt Ihnen das Aufzeichnen des Bildschirminhalts. Die resultierenden Videofiles landen automatisch im Isolated Storage Ihrer Applikation und lassen sich von dort aus an soziale Netzwerke übertragen.

Dazu ist ein ScreenCapture-Objekt notwendig, das sich durch folgenden Aufruf erzeugen lässt: var screenCapture = Windows.Media.Capture.ScreenCapture.GetForCurrentView();

Im nächsten Schritt wird dieses als Datenquelle an ein MediaCapture-Objekt übergeben. Wenn Sie dieses – wie gewohnt – zur Ausführung freigeben, wandert der Bildschirminhalt in die als Ziel angegebene Datei. Microsoft bietet hierfür ein sehr sauber kommentiertes Beispiel an, das zum Download bereit steht.

Aus rechtlichen Gründen wird die Aufnahme des Bildschirminhalts in manchen Betriebsphasen blockiert. Eingehende Anrufe oder das Abspielen eines DRM-geschützten Inhalts beenden den Clip – letzteres ärgerlicherweise auch dann, wenn ihr Programm als „Medienquelle“ dient.

Mehr Multimedia

Smartphones haben dedizierte Mediaplayer verdrängt. Im Laufe der letzten Monate versehen die Hersteller ihre Telefone mit immer ausgiebigeren Bearbeitungsfunktionen, welche die aufgenommenen Inhalte verfremden.

Microsoft reagiert auf diese Situation durch das Anbieten eines neuen Multimediaframeworks. Die Grundstruktur des als Media Foundation bezeichneten Systems ist in Abbildung 7 gezeigt.

Abb. 7: Die Kommunikation mit dem Multimedia-Subsystem kann auf zwei Arten erfolgen (Bildquelle: Microsoft)

Abb. 7: Die Kommunikation mit dem Multimedia-Subsystem kann auf zwei Arten erfolgen (Bildquelle: Microsoft)

Auf der linken Seite des Diagramms ist der Aufbau eines „primitiven“ Systems beschrieben. Es stellt dem Framework ein Steuerelement zur Verfügung, in das die aus den Quellen stammenden Multimediainhalte kopiert werden. Komplexere Interaktionen lassen sich über den auf der rechten Seite beschriebenen Aufbau realisieren. Hier laufen die anzuzeigenden Inhalte durch ihre Applikation, wo sie weiterverarbeitet werden können.

Die im Namespace Windows.Media.Editing enthaltenen Klassen sind besonders witzig. Sie erlauben Ihnen grundlegende Bearbeitungen der Inhalte: Neben dem Zuschneiden und Vertonen von Videoclips können Sie über Windows Media Foundation Transforms sogar „fortgeschrittene“ Effekte anwenden.

Browser zur Elften

Pocket Internet Explorer war in der Anfangszeit ein nur wenig ernstzunehmendes Anzeigeprogramm für Webseiten. Seit dem Erscheinen von Windows Phone 7 wurden die Browser-Engines mehr und mehr mit der vom Desktop bekannten zusammengelegt; Windows Phone 8.1 bringt die Aktualisierung auf IE 11.

Daraus folgen diverse neue Funktionen, die für Webdesigner von Relevanz sind. Canvas-Steuerelemente werden ab sofort nicht mehr zwangsweise mit einem bilinearen Skalierungsalgorithmus bearbeitet. Wer Sprite-basierte Spiele realisiert, freut sich mitunter über den dadurch entstehenden Retrolook (Abb. 8 und 9).

Abb. 8: (Durch Zoom verursachte) Unterschiede zwischen Bildschirm- und Sprite-Auflösung wurden bisher durch Skalierung „verwischt“ (Quelle: Microsoft)

Abb. 8: (Durch Zoom verursachte) Unterschiede zwischen Bildschirm- und Sprite-Auflösung wurden bisher durch Skalierung „verwischt“ (Quelle: Microsoft)

Abb. 9: IE 11 unterlässt diese Adaptierung auf Wunsch (Quelle: Microsoft)

Abb. 9: IE 11 unterlässt diese Adaptierung auf Wunsch (Quelle: Microsoft)

Entwickler von Spielen für Firefox OS dürfen fortan auf WebGL zurückgreifen, die Bibliothek Three.js wird mehr oder weniger vollständig unterstützt.

Internet Explorer 11 beschleunigt die Navigation durch Webseiten mit einer Vielzahl von Funktionen. Prerendering und Prefetching erlauben Ihnen, einige Ressourcen als „potenziell interessant“ zu kennzeichnen. Die Browser-Engine lädt sie in diesem Fall präventiv herunter, was beim tatsächlichen Anzeigen des Inhalts Zeit spart. Back Caching hält „vorher geschlossene“ Seiten im Speicher, was beim Rückwärtsnavigieren unter Umständen zu Geschwindigkeitssteigerungen führt.

Im Großen und Ganzen wurden die hier zusammengefassten Änderungen 1:1 auf das Smartphone übertragen – Sie müssen lediglich auf die folgenden Funktionen verzichten:

  • Ausnahmen für Do Not Track
  • Drag and Drop
  • Encrypted Media Extentions für HTM5-Videoinhalte
  • F12-Entwicklerwerkzeuge

Karte mit Schreibzugriff

Unter Windows Phone 7 diente der SD-Kartenslot nur dem Hersteller. Er konnte dadurch ohne kostspielige Planarenänderung zwei Versionen eines Telefons anbieten, die sich im Speicherausbau unterscheiden. Windows Phone 8 erlaubte Drittanbietern den lesenden Zugriff auf SD-Karten, mit Windows Phone 8.1 folgt die Schreibfähigkeit auf den Fuß. Dies wird über das aus dem Windows Store bekannte API Windows.Storage realisiert. Es ist komplett asynchron aufgebaut – auch für „harmlose“ Prozesse wie das Erstellen einer Datei gibt es keine synchrone Methode:

StorageFolder folder = KnownFolders.PicturesLibrary;
StorageFile sampleFile = await folder.CreateFileAsync("sample.txt",
 CreationCollisionOption.ReplaceExisting);

Häufig verwendete Pfade werden über das KnownFolders-Objekt exponiert. Leider sind für einige Verzeichnisse zusätzliche Deklarationen notwendig: Wer auf den Pictures-Ordner zugreifen möchte, muss dies über das Manifest anmelden. Besonders lästig ist der Zugriff auf „allgemeine Ordner“, da Ihr Programm nur auf jene Dateitypen zugreifen darf, die es im Manifest deklariert. Weitere Informationen hierzu finden Sie hier. Da preiswerte Windows Phones mit wenig Arbeitsspeicher auskommen müssen, besteht bei einigen APIs das Risiko, dass die App nach der Abarbeitung des Choosers bzw. des Pickers vom Garbage Collector aus dem Speicher geworfen wird. Microsoft umgeht dieses Problem durch eine Gruppe von spezialisierten Aufrufen, die in Tabelle 1 zusammengefasst sind.

Rolle Windows Store Windows Phone
Zu öffnende Datei auswählen PickSingleFileAsync PickSingleFileAndContinue
Dateiname und Speicherort einer Datei auswählen PickSaveFileAsync PickSaveFileAndContinue
Ordner auswählen PickSingleFolderAsync PickFolderAndContinue
Bei einem sozialen Netzwerk anmelden AuthenticateAsync AuthenticateAndContinue

Tabelle 1: Spezialisierte Aufrufe in Windows Phone

Auf Seiten Ihrer Applikation ist die Implementierung zweier als SuspensionManager und ContinuationManager bezeichneten Klassen erforderlich, deren Quellcode zum Download bereitsteht.

Direct3D auf Speed

Wer unter Windows Phone 8.0 mit Direct3D arbeitete, musste auf viele vom Desktop bekannte Funktionen verzichten. Die neue Betriebssystemversion rüstet die folgenden APIs nach, um Spieleentwicklern das Portieren von Code zu erleichtern:

  • Direct2D APIs
  • DirectWrite APIs
  • Windows Imaging Component APIs
  • Runtime shader compilation and reflection
  • GPU access to YUV shaders
  • GPU performance counters
  • Graphics diagnostics support

Fazit

Windows Phone 8.1 ist ein sowohl für Entwickler als auch für Endanwender interessantes Update. Während der durchschnittliche User von den Neuerungen sofort nach der Installation profitiert, ist auf Seiten der Entwickler ein wenig Umdenken erforderlich. Wer Windows Phone 8.1 nur als Quelle neuer Funktionen betrachtet, kann seinen Kunden die eine oder andere neue Funktion anbieten. Leider geht damit ein Gutteil der Möglichkeiten verloren: Der wahre Vorteil des neuen Systems ist die vereinheitlichte Plattform.

Der schlechte Ruf von Cross-Plattform-Applikationsframeworks geht darauf zurück, dass viele Entwickler ihre Benutzerschnittstellen gedankenlos auf verschiedenen Geräten einsetzen. Dies ist und bleibt ein Rezept für Disaster: Die Bedürfnisse der Nutzer sind zu verschieden, um von einer einzelnen Programmversion bedient zu werden. Leider scheiterte die Erstellung von spezifischen GUIs bisher oft an Zeitmangel. Bei kreativer Nutzung der Windows Runtime können Sie dieses Problem umgehen. Eine sauber aufgebaute Engine lässt sich 1:1 portieren, die dadurch gewonnene Zeit lässt sich in die Erstellung des zweiten GUIs investieren.

Aufmacherbild: Close up of a man using mobile smart phone von Shutterstock / Urheberrecht: Kostenko Maxim

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -