neue Funktionen in Windows Phone 7.5 – Teil 2 (Teil 4)
Kommentare

Würde man einen Starbucks in der Nähe des derzeitigen Aufenthaltsorts des Users suchen, ließe man das Feld Center leer, Windows Phone eruiert dann automatisch die Position des Anwenders und legt sie

Würde man einen Starbucks in der Nähe des derzeitigen Aufenthaltsorts des Users suchen, ließe man das Feld Center leer, Windows Phone eruiert dann automatisch die Position des Anwenders und legt sie in die Mitte der Karte. Übrigens: Bing Maps funktioniert im Simulator bestenfalls rudimentär. Wer also kein Mango Handset hat, kann sich das Abtippen des Listings ersparen. Wollen wir stattdessen einen Chooser realisieren, wird die Sache etwas komplizierter. Er muss ja, anders als der Launcher, einen Rückgabewert an die eigene Anwendung zurückliefern. Im ersten Schritt erweitern wir dabei die PhoneApplicationPage unserer Anwendung um das Codesegment in Listing 10.

Listing 10

public partial class MainPage : PhoneApplicationPage
  {
    AddressChooserTask myChooser;

    public MainPage()
    {
      InitializeComponent();

      myChooser = new AddressChooserTask();
      myChooser.Completed += new EventHandler(addressChooserTask_Completed);
    }  

Am wichtigsten ist hier die Platzierung der Hinzufügungen. Die Variable mit der Instanz des Choosers muss eine globale Variable der Page sein und außerdem im Konstruktor des Formulars belebt werden. Das ist insofern wichtig, als die eigene Anwendung während der Ausführung des Choosers im schlimmsten Fall getombstoned wird, wodurch die Instanz der Variable verloren gehen würde. Der Event Handler folgt dem Schema in Listing 11.

Listing 11

void addressChooserTask_Completed(object sender, AddressResult e)
{
  if (e.TaskResult == TaskResult.OK)
  {
    TxtAntwort.Text = e.DisplayName + " wohnt in " + e.Address;
  }
}  

Als Erstes wird überprüft, ob der Aufruf erfolgreich war. Wenn ja, wird der Resultatparameter e ausgewertet und die Ergebnisse werden in einer Textbox angezeigt. Zu guter Letzt folgt der Aufruf des Choosers in Listing 12.

Listing 12

private void button2_Click(object sender, RoutedEventArgs e)
{
  try
  {
    myChooser.Show();
  }
  catch (System.InvalidOperationException ex)
  {
    // Nichts los
  }
}  

An sich wird der Chooser wie ein normaler Launcher gestartet. Allerdings gibt es hier ein wichtiges Gotcha: Sollte aus irgendeinem (unplausiblen) Grund schon ein Chooser aktiv sein, würde eine Exception auftreten. Damit wäre unser Chooser komplett realisiert. Wenn wir diesen Teil der Anwendung im Simulator starten, wird eine Default-Kontaktliste eingeblendet, der funktionalen Verifikation dieses Programmteils steht also nichts im Weg.

Selbstreflektion

Obwohl die Hardware von Windows-Phone-7-basierten Telefonen weitestgehend identisch ist, bietet Mango die Möglichkeit zur Selbstreflektion auf Plattformebene. Dazu dient ein API namens Microsoft.PhoneInfo. Listing 13 zeigt ein kleines Code-Snippet, das den Namen des Geräts, den Zustand der Energieversorgung und die Verfügbarkeit einer Tastatur abfragt.

Listing 13

TxtManuf.Text = DeviceStatus.DeviceManufacturer;
TxtOsVer.Text = DeviceStatus.DeviceFirmwareVersion;

if (DeviceStatus.IsKeyboardPresent == true)
{
    ChkHasKB.IsChecked = true;
}
else
{
    ChkHasKB.IsChecked = false;
}

if (DeviceStatus.PowerSource == PowerSource.External)
{
    ChkPower.IsChecked = true;
}
else
{
    ChkPower.IsChecked = false;
}  

An sich ist dieses Codestück kein Problem: Diverse statische Methoden der Klasse DeviceStatus werden aufgerufen, um die Betriebssystemversion, die Firmware-Version, den Energieversorgungszustand und die Verfügbarkeit einer physikalischen Tastatur abzufragen.

Wer sich im Emulator befindet, hat immer eine Tastatur, allerdings keine Firmware-Version. Der Batteriezustand wird zumindest am Samsung X360 des Autors auch immer mit External angegeben, die Verwendung von APM/ACPI dürfte noch nicht bis zum Windows-Phone-Team durchgedrungen sein. Wichtig ist, dass eine derartige Anwendung höchstwahrscheinlich nicht im App Hub zugelassen wird. Microsoft weist in der Dokumentation explizit darauf hin, dass die DeviceInfo-Klasse nicht dazu verwendet werden darf, um Informationen an den Benutzer weiterzugeben. Witzigerweise hat man mit dem Tracking des Benutzers keine Probleme: „A recommended use for the DeviceStatus API is to send the raw device status information to a web service in order to generate statistics or usage data.“ Zusätzlich gibt es die Möglichkeit, über Änderungen informiert zu werden. Mehr dazu befindet sich in der Dokumentation hier.

Fazit

Die neuen Funktionen von Windows Phone 7.1 sind zweifelsohne attraktiv. Man merkt, dass Microsoft auf die Wünsche der Entwickler eingeht. Allerdings bleibt das Kernproblem der Plattform nach wie vor ungelöst: Es gibt viel zu wenig Windows-Phone-7-Hardware auf dem Markt. Die Zusammenarbeit mit Nokia trägt wenn denn überhaupt frühestens im vierten Quartal dieses Jahres Früchte, die Preise der existierenden Hardware befinden sich im freien Fall und bei Netzbetreibern findet man bestenfalls verstaubte Dummies. Es bleibt also spannend!

Tam Hanna befasst sich seit der Zeit des Palm IIIc mit Programmierung und Anwendung von Handcomputern. Er entwickelt Programme für diverse Plattformen und betreibt außerdem mehrere populäre Onlinenewsdienste zum Thema.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -