Windows Phone 8 Kurz und bündig Multimedia-Anwendungen

In diesem Lernprogramm konzentrieren wir uns darauf, wie Sie eine Multimedia-Anwendung für Windows Phone erstellen, indem Sie die Kamera des Geräts nutzen, mit der Medienbibliothek interagieren und die Möglichkeiten des Photos Hub erkunden.

Kamera verwenden

Die Kamera ist eine der wichtigsten Funktionen in Windows Phone-Geräten, insbesondere dank Nokia, das einige der besten auf dem Markt erhältlichen Kamerahandys entwickelt hat.

Als Entwickler können wir das Kameraerlebnis in unsere Anwendung integrieren, sodass Benutzer Bilder direkt in der Anwendung aufnehmen und bearbeiten können. Darüber hinaus ist es mit der Lens-App-Funktion, die wir später besprechen werden, noch einfacher, Anwendungen zu erstellen, die das native Kameraerlebnis ersetzen können.

Hinweis: Um mit der Kamera zu interagieren, müssen Sie das aktivieren ID_CAP_IS_CAMERA Fähigkeit in der Manifestdatei.

Der erste Schritt ist das Erstellen eines Bereichs auf der Seite, in dem das von der Kamera aufgenommene Bild angezeigt werden kann. Wir werden es benutzen VideoBrush, Dies ist einer der nativen XAML-Pinsel, die ein Video einbetten können. Wir werden es als Hintergrund von a verwenden Segeltuch Kontrolle, wie im folgenden Beispiel gezeigt:

        

Beachten Sie die CompositeTransform das wurde angewendet; Ihr Zweck besteht darin, die korrekte Ausrichtung des Videos basierend auf der Kameraausrichtung beizubehalten.

Fotografieren

Da wir jetzt einen Platz zum Anzeigen des Live-Kamera-Feeds haben, können wir die APIs verwenden, die in der enthalten sind Windows.Phone.Media.Capture Namespace. Insbesondere wird die Klasse aufgerufen, die zum Aufnehmen von Bildern verfügbar ist PhotoCaptureDevice (später sehen wir eine andere Klasse zum Aufnehmen von Videos).

Der folgende Code ist eine Beispielinitialisierung:

protected override async void OnNavigatedTo (NavigationEventArgs e) Auflösung der Auflösung = PhotoCaptureDevice.GetAvailableCaptureResolutions (CameraSensorLocation.Back) .First (); PhotoCaptureDevice camera = PhotoCaptureDevice.OpenAsync erwarten (CameraSensorLocation.Back, Auflösung); video.SetSource (Kamera); previewTransform.Rotation = camera.SensorRotationInDegrees; 

Vor dem Initialisieren des Live-Feeds müssen wir zwei Entscheidungen treffen: welche Kamera verwendet werden soll und welche der verfügbaren Auflösungen verwendet werden soll.

Wir erreichen dies durch den Aufruf von GetAvailableCaptureResolutions () Methode auf der PhotoCaptureDevice Klasse, übergeben als Parameter a CameraSensorLocation Objekt, das die Kamera darstellt, die wir verwenden werden. Die Methode gibt eine Sammlung der unterstützten Auflösungen zurück, die durch das Symbol identifiziert werden Größe Klasse.

Tipp: Es ist sicher, den vorherigen Code zu verwenden, da jedes Windows Phone-Gerät über eine Rückfahrkamera verfügt. Wenn Sie stattdessen mit der Frontkamera interagieren möchten, sollten Sie zuerst prüfen, ob eine Kamera verfügbar ist, da nicht alle Windows Phone-Geräte über eine verfügen. Dazu können Sie die AvailableSensorLocation Eigentum der PhotoCaptureDevice Klasse, die eine Sammlung aller unterstützten Kameras ist.

Wenn wir uns entschieden haben, welche Auflösung verwendet werden soll, können wir sie als Parameter (zusammen mit der ausgewählten Kamera) an die Kamera übergeben OpenAsync () Methode der PhotoCaptureDevice Klasse. Es wird ein zurückkehren PhotoCaptureDevice Objekt, das den Live-Feed enthält; wir müssen es einfach an den übergeben SetSource () Methode der VideoBrush

Wie bereits erwähnt, behandeln wir die Kameraorientierung mithilfe der Transformation, die wir auf die angewendet haben VideoBrush: wir setzen das Drehung Verwendung der SensorRotationInDegrees Eigenschaft, die die Drehung des aktuellen Winkels enthält.

Hinweis: Möglicherweise erhalten Sie eine Fehlermeldung, wenn Sie versuchen, eine PhotoCaptureDevice Objekt als Parameter der SetSource () Methode der VideoBrush. Wenn ja, müssen Sie das hinzufügen Microsoft.Devices Namespace für Ihre Klasse, da sie eine Erweiterungsmethode für die enthält SetSource () Methode, die das unterstützt PhotoCaptureDevice Klasse.

Jetzt zeigt die Anwendung einfach den Live-Feed der Kamera auf dem Bildschirm an. Der nächste Schritt besteht darin, das Bild aufzunehmen.

Die von der API verwendete Technik besteht darin, eine Sequenz von Frames zu erstellen und diese als Stream zu speichern. Leider gibt es im aktuellen SDK eine Einschränkung: Sie können jeweils nur ein Bild aufnehmen, sodass Sie nur Sequenzen verwenden können, die mit einem Frame erstellt wurden.

privat async void OnTakePhotoClicked (Objektsender, RoutedEventArgs e) CameraCaptureSequence cameraCaptureSequence = camera.CreateCaptureSequence (1); MemoryStream-Stream = neu MemoryStream (); cameraCaptureSequence.Frames [0] .CaptureStream = Stream.AsOutputStream (); waitit camera.PrepareCaptureSequenceAsync (cameraCaptureSequence); waitCameraCaptureSequence.StartCaptureAsync () erwarten; stream.Seek (0, SeekOrigin.Begin); Medienbibliothek Bibliothek = neue Medienbibliothek (); library.SavePictureToCameraRoll ("picture1.jpg", Stream); 

Der Prozess beginnt mit a CameraCaptureSequence Objekt, das den Erfassungsstrom darstellt. Aufgrund der oben erwähnten Einschränkung auf ein Bild können Sie die CreateCaptureSequence () Methode der PhotoCaptureDevice Klasse nur durch Weitergeben 1 als dessen Parameter.

Aus dem gleichen Grund werden wir nur mit dem ersten Frame der Sequenz arbeiten, die im gespeichert ist Frames Sammlung. Das CaptureStream Die Eigenschaft des Frames muss mit dem Stream festgelegt werden, den wir zum Speichern des erfassten Bildes verwenden werden. Im vorherigen Beispiel verwenden wir a MemoryStream um das Foto zu speichern. Auf diese Weise können wir es später im Photos Hub des Benutzers speichern (insbesondere im Camera Roll-Album)..

Hinweis: Um mit dem zu interagieren Medienbibliothek Klasse müssen Sie die aktivieren ID_CAP_MEDIALIB_PHOTO Fähigkeit in der Manifestdatei.

Sie können viele Einstellungen der Kamera auch anpassen, indem Sie die SetProperty () Methode auf der PhotoCaptureDevice Objekt, das zwei Parameter erfordert: die zu setzende Eigenschaft und den zuzuweisenden Wert. Die verfügbaren Eigenschaften werden von zwei Enumeratoren definiert: BekannteKameraAllgemeinEigenschaften, welches die allgemeinen Kameraeigenschaften enthält, und BekannteCameraPhotoProperties, welche die foto-spezifischen Eigenschaften enthält.

Einige Eigenschaften sind schreibgeschützt. Sie können also nur die entsprechenden Werte mit Hilfe von. Abrufen GetProperty () Methode.

In den folgenden Beispielen verwenden wir die SetProperty () Methode zum Einstellen des Blitzmodus und GetProperty () Informationen darüber, ob die aktuelle Region die Telefone dazu zwingt, beim Fotografieren einen Ton abzuspielen.

private void OnSetPropertiesClicked (Objektsender, RoutedEventArgs e) camera.SetProperty (KnownCameraPhotoProperties.FlashMode, FlashMode.RedEyeReduction); bool isShutterSoundRequired = (bool) camera.GetProperty (KnownCameraGeneralProperties.IsShutterSoundRequiredForRegion); 

Notiere dass der GetProperty () Die Methode gibt immer ein generisches Objekt zurück, sodass Sie es entsprechend den abgefragten Eigenschaften manuell umwandeln müssen.

In der MSDN-Dokumentation finden Sie eine Liste aller verfügbaren Eigenschaften.

Verwenden des Hardware-Kameraschlüssels

In der Regel verfügen Windows Phone-Geräte über eine eigene Taste für die Kamera, mit der der Fokus durch halbes Drücken eingestellt werden kann und das Bild durch vollständiges Drücken aufgenommen werden kann. Sie können diese Schaltfläche auch in Ihren Anwendungen verwenden, indem Sie drei Ereignisse abonnieren, die vom angezeigt werden CameraButtons statische Klasse:

  • ShutterKeyPressed wird ausgelöst, wenn die Taste gedrückt wird.
  • ShutterKeyReleased wird ausgelöst, wenn die Taste losgelassen wird.
  • ShutterKeyHalfPressed wird ausgelöst, wenn die Taste halb gedrückt wird.

Im folgenden Beispiel abonnieren wir die ShutterKeyReleased Veranstaltung, um ein Foto zu machen und die ShutterKeyHalfPressed Ereignis, um die Autofokus-Funktion zu verwenden.

public Camera () InitializeComponent (); CameraButtons.ShutterKeyReleased + = CameraButtons_ShutterKeyReleased; CameraButtons.ShutterKeyHalfPressed + = CameraButtons_ShutterKeyHalfPressed;  async void CameraButtons_ShutterKeyHalfPressed (Objektsender, EventArgs e) await camera.FocusAsync ();  void CameraButtons_ShutterKeyReleased (Objektsender, EventArgs e) // Nehmen Sie das Bild auf. 

Video aufnehmen

Das Aufnehmen eines Videos ähnelt dem, mit dem wir ein Foto aufgenommen haben. In diesem Fall verwenden wir die AudioVideoCaptureDevice Klasse statt der PhotoCaptureDevice Klasse. Wie Sie im folgenden Beispiel sehen können, ist das Initialisierungsverfahren dasselbe: Wir entscheiden, welche Auflösung und Kamera wir verwenden möchten, und zeigen den zurückgegebenen Live-Feed mithilfe von a an VideoBrush.

Hinweis: Um Videos aufzunehmen, müssen Sie auch das aktivieren ID_CAP_MICROPHONE Fähigkeit in der Manifestdatei.

protected override async void OnNavigatedTo (NavigationEventArgs e) Auflösung der Auflösung = AudioVideoCaptureDevice.GetAvailableCaptureResolutions (CameraSensorLocation.Back) .First (); videoDevice = erwartet AudioVideoCaptureDevice.OpenAsync (CameraSensorLocation.Back, Auflösung); video.SetSource (videoDevice); previewTransform.Rotation = videoDevice.SensorRotationInDegrees; 

Das Aufnehmen eines Videos ist seit dem noch einfacher AudioVideoCaptureDevice Klasse macht die StartRecordingToStreamAsync () Methode, bei der Sie lediglich angeben müssen, wo die aufgezeichneten Daten gespeichert werden sollen. Da es sich um ein Video handelt, benötigen Sie auch eine Möglichkeit, die Aufnahme zu stoppen. das ist der Zweck des StopRecordingAsync () Methode.

Im folgenden Beispiel wird die Aufzeichnung in einer Datei gespeichert, die im lokalen Speicher erstellt wurde:

private AudioVideoCaptureDevice videoDevice; privater IRandomAccessStream-Stream; private StorageFile-Datei; public VideoRecording () InitializeComponent ();  private async void OnRecordVideoClicked (Objektsender, RoutedEventArgs e) file = await ApplicationData.Current.LocalFolder.CreateFileAsync ("video.wmv", CreationCollisionOption.ReplaceExisting); stream = Datei erwarten.OpenAsync (FileAccessMode.ReadWrite); videoDevice.StartRecordingToStreamAsync (Stream);  private async void OnStopRecordingClicked (Objektsender, RoutedEventArgs e) await videoDevice.StopRecordingAsync (); waitit stream.FlushAsync (); 

Sie können das Ergebnis der Operation einfach mit Hilfe von testen MediaPlayerLauncher Klasse, um die Aufnahme abzuspielen:

private void OnPlayVideoClicked (Objektsender, RoutedEventArgs e) MediaPlayerLauncher-Launcher = neuer MediaPlayerLauncher Media = neuer Uri (file.Path, UriKind.Relative); Launcher.Show (); 

Das SDK bietet eine bestimmte Liste anpassbarer Einstellungen für die Videoaufnahme. Sie sind in der BekannteCameraAudioVideoProperties Enumerator.

Interaktion mit der Medienbibliothek

Das Framework bietet eine Klasse namens Medienbibliothek, die für die Interaktion mit der Benutzermedienbibliothek (Fotos, Musik usw.) verwendet werden kann. Sehen wir uns an, wie Sie damit die häufigsten Szenarien verwalten können.

Hinweis: In der aktuellen Version gibt es keine Möglichkeit, mit der Bibliothek zu interagieren, um neue Videos in der Camera Roll zu speichern oder auf den Stream vorhandener Videos zuzugreifen.

Bilder

Das Medienbibliothek Mit der Klasse können Sie dank des Programms auf die im Photos Hub gespeicherten Bilder zugreifen Bilder Sammlung. Es ist eine Sammlung von Bild Objekte, wobei jedes ein im Photos Hub gespeichertes Bild darstellt.

Hinweis: Sie müssen das aktivieren ID_CAP_MEDIALIB_PHOTO Funktion in der Manifestdatei, um auf die im Photos Hub gespeicherten Bilder zuzugreifen.

Das Bilder Sammlung gewährt Zugriff auf folgende Alben:

  • Filmrolle
  • Gespeicherte Bilder
  • Screenshots

Auf alle anderen im People Hub angezeigten Alben, die von Remote-Diensten wie SkyDrive oder Facebook stammen, ist der Zugriff auf das System nicht möglich Medienbibliothek Klasse.

Tipp: Die Medienbibliothek Klasse macht eine aufgerufene Sammlung verfügbar Gespeicherte Bilder, enthält nur die Bilder, die im Album "Gespeicherte Bilder" gespeichert sind.

Jeden Bild object bietet einige Eigenschaften, um Zugriff auf die grundlegenden Informationen zu erhalten, wie z Name, Breite, und Höhe. Eine sehr wichtige Eigenschaft ist Album, enthält die Referenz des Albums, in dem das Bild gespeichert ist. Außerdem können Sie auf verschiedene Streams zugreifen, wenn Sie das Bild bearbeiten oder in Ihrer Anwendung anzeigen möchten:

  • Das GetPicture () Methode gibt den Stream des Originalbildes zurück.
  • Das GetThumbnail () Diese Methode gibt den Stream der Miniaturansicht zurück, bei der es sich um eine Version mit niedriger Auflösung des Originalbilds handelt.
  • Wenn Sie das hinzufügen PhoneExtensions Namespace für Ihre Klasse, können Sie das verwenden GetPreviewImage () Methode, die ein Vorschaubild zurückgibt. Ihre Auflösung und Größe liegen zwischen dem Originalbild und der Miniaturansicht.

Im folgenden Beispiel generieren wir die Miniaturansicht des ersten verfügbaren Bildes in der Camera Roll und zeigen es mithilfe von an Bild Steuerung:

private void OnSetPhotoClicked (Objektsender, RoutedEventArgs e) MediaLibrary library = neue MediaLibrary (); Picture picture = library.Pictures.FirstOrDefault (x => x.Album.Name == "Camera Roll"); if (picture! = null) BitmapImage image = new BitmapImage (); image.SetSource (picture.GetThumbnail ()); Thumbnail.Source = Bild; 

Tipp: Um mit dem zu interagieren Medienbibliothek Wenn Sie den Emulator verwenden, müssen Sie den Photos Hub mindestens einmal öffnen. Andernfalls erhalten Sie eine leere Sammlung von Bildern, wenn Sie das abfragen Bilder Eigentum.

Mit dem Medienbibliothek In dieser Klasse können Sie auch das Gegenteil tun: Machen Sie ein Foto in Ihrer Anwendung und speichern Sie es im People Hub. Wir haben bereits ein Beispiel gesehen, als wir über die Integration der Kamera in unsere Anwendung sprachen. Wir können das Bild in der Camera Roll speichern (mit der SavePictureToCameraRoll () Methode) oder im Album "Gespeicherte Bilder" (mit der Bild speichern() Methode). In beiden Fällen sind die erforderlichen Parameter der Name des Images und der Stream.

Im folgenden Beispiel laden wir ein Bild aus dem Internet herunter und speichern es im Album "Gespeicherte Bilder":

privat async void OnDownloadPhotoClicked (Objektsender, RoutedEventArgs e) HttpClient client = new HttpClient (); Stream Stream = Erwarte Client.GetStreamAsync ("http://www.syncfusion.com/Content/en-US/Home/Images/syncfusion-logo.png"); Medienbibliothek Bibliothek = neue Medienbibliothek (); library.SavePicture ("logo.jpg", Stream); 

Musik

Das Medienbibliothek Die Klasse bietet viele Optionen für den Zugriff auf Musik. Es gibt jedoch einige Einschränkungen, die beim Arbeiten mit Bildern nicht gegeben sind. 

Hinweis: Sie müssen das aktivieren ID_CAP_MEDIALIB_AUDIO Funktion in der Manifestdatei, um auf die im Photos Hub gespeicherten Bilder zuzugreifen. 

Die folgenden Sammlungen werden von der veröffentlicht Medienbibliothek Klasse für den Zugriff auf Musik:

  • Alben Zugriff auf Musikalben.
  • Lieder Zugriff auf alle verfügbaren Songs.
  • Genres Zugriff auf die nach Genre gruppierten Songs.
  • Wiedergabelisten Zugriff auf Wiedergabelisten.

Jedes Lied wird durch das gekennzeichnet Lied Klasse, die alle allgemeinen Informationen zu einem Musiktitel enthält, der direkt vom ID3-Tag abgerufen wird: Album, Künstler, Titel, Titelnummer, und so weiter.

Leider gibt es keinen Zugriff auf den Stream eines Songs. Die einzige Möglichkeit, Tracks abzuspielen, ist die Verwendung von Media Player Klasse, die Teil der Microsoft.XNA.Framework.Media Namespace. Diese Klasse stellt viele Methoden für die Interaktion mit Spuren bereit. Das Abspielen() Methode akzeptiert als Parameter a Lied Objekt, abgerufen vom Medienbibliothek.

In dem folgenden Beispiel reproduzieren wir das erste in der Bibliothek verfügbare Lied:

private void OnPlaySong (Objektsender, RoutedEventArgs e) MediaLibrary library = new MediaLibrary (); Song song = library.Songs.FirstOrDefault (); MediaPlayer.Play (Lied); 

Mit einer der neuen Funktionen von Windows Phone 8 können Sie einen im lokalen Speicher der Anwendung gespeicherten Titel in der Medienbibliothek speichern, damit er vom nativen Music + Videos Hub abgespielt werden kann. Dies erfordert die Microsoft.Xna.Framework.Media.PhoneExtensions Namespace, der Ihrer Klasse hinzugefügt werden soll.

private async void OnDownloadMusicClicked (Objektsender, RoutedEventArgs e) MediaLibrary library = new MediaLibrary (); SongMetadata metadata = neue SongMetadata AlbumName = "Ein Blutstoß in den Kopf", ArtistName = "Coldplay", Name = "Clocks"; library.SaveSong (neuer Uri ("song.mp3", UriKind.RelativeOrAbsolute), Metadaten, SaveSongOperation.CopyToLibrary); 

Das SaveSong () Die Methode erfordert drei Parameter, wie im vorherigen Beispiel gezeigt:

  • Der Pfad des zu speichernden Songs. Es ist ein relativer Pfad, der auf den lokalen Speicher verweist.
  • Die Song-Metadaten, die durch das gekennzeichnet sind SongMetadata Klasse. Es ist ein optionaler Parameter. wenn du passierst Null, Windows Phone extrahiert automatisch die ID3-Informationen aus der Datei.
  • EIN SaveSongOperation Objekt, das der Medienbibliothek mitteilt, ob die Datei kopiert werden soll (CopyToLibrary) oder verschoben (MoveToLibrary) so dass es aus dem Speicher gelöscht wird.

Objektiv-Apps

Windows Phone 8 hat neue Funktionen für fotografische Anwendungen eingeführt. Einige der interessantesten werden genannt Objektiv-Apps, die verschiedene Filter und Effekte auf Bilder anwenden. Windows Phone bietet eine Möglichkeit zum einfachen Wechseln zwischen verschiedenen Kameraanwendungen, um Filter im Handumdrehen anzuwenden.

Lens-Apps sind normale Windows Phone-Anwendungen, die mit den Kamera-APIs interagieren, die wir zu Beginn dieses Artikels verwendet haben. Der Unterschied ist, dass eine Objektiv-App im angezeigt wird Linsen Abschnitt der nativen Kamera-App; Wenn Benutzer die Kamerataste drücken, wird eine spezielle Ansicht mit allen verfügbaren Objektiv-Apps angezeigt. Auf diese Weise können sie problemlos zu einer anderen Anwendung wechseln, um das Bild aufzunehmen.

Die Integration mit der Objektlinsenansicht beginnt mit der Manifestdatei, die durch Auswahl von manuell bearbeitet werden muss Code anzeigen Option im Kontextmenü. Der folgende Code muss in der hinzugefügt werden Erweiterung Sektion:

  

Jede Objektiv-App benötigt ein bestimmtes Symbol, das in der Objektivansicht angezeigt wird. Die Symbole werden automatisch vom abgerufen Vermögenswerte Ordner basierend auf einer Namenskonvention. Für jede unterstützte Auflösung muss ein Symbol mit den Konventionen in der folgenden Tabelle hinzugefügt werden:

Auflösung

Symbolgröße

Dateiname

480 × 800

173 × 173

Lens.Screen-WVGA.png

768 × 1280

277 × 277

Lens.Screen-WXGA.png

720 × 1280

259 × 259

Lens.Screen-720p.png

Das UriMapper Für das Arbeiten mit Objektiv-Apps ist eine Klasse erforderlich. Tatsächlich werden Linsen-Apps mit einer speziellen URI geöffnet, die abgefangen und verwaltet werden muss. Der folgende Code ist ein Beispiel Uri:

/MainPage.xaml?Action=ViewfinderLaunch

Wenn das Uri abgefangen wird, sollten Benutzer auf die Anwendungsseite umgeleitet werden, auf der das Bild aufgenommen wird. Im folgenden Beispiel sehen Sie a UriMapper Implementierung, die Benutzer zu einer aufgerufenen Seite umleitet Camera.xaml Wenn die Anwendung aus der Objektivansicht geöffnet wird.

public class MyUriMapper: UriMapperBase public überschreiben Uri MapUri (Uri uri) string tempUri = uri.ToString (); if (tempUri.Contains ("ViewfinderLaunch")) neuen Uri zurückgeben ("/ Camera.xaml", UriKind.Relative);  else return uri; 

Support-Freigabe

Wenn Sie eine Anwendung entwickelt haben, die die gemeinsame Nutzung von Fotos unterstützt, z. B. ein Client für ein soziales Netzwerk, können Sie diese in die Aktie Menü des Photos Hub. Benutzer finden diese Option in der Anwendungsleiste auf der Fotodetailseite.

Wenn Benutzer diese Option wählen, zeigt Windows Phone eine Liste der Anwendungen an, die zur Unterstützung der Freigabe registriert sind. Wir können unsere Anwendung zur Liste hinzufügen, indem Sie einfach eine neue Erweiterung in die Manifestdatei einfügen.

Wir müssen die folgende Deklaration manuell hinzufügen Erweiterungen Sektion:

  

Wenn Benutzer unsere Anwendung aus der Liste auswählen, wird sie mit dem folgenden URI geöffnet:

/MainPage.xaml?Action=ShareContent&FileId=%7B1ECC86A2-CDD7-494B-A9A8-DBD9B4C4AAC7%7D

Wieder können wir a verwenden UriMapper Implementierung, um Benutzer auf die Seite unserer Anwendung umzuleiten, die die Freigabefunktion bietet. Es ist auch wichtig, das zu tragen FiledId Parameter auf dieser Seite; Wir werden es benötigen, um zu wissen, welches Foto vom Benutzer ausgewählt wurde.

Das folgende Beispiel zeigt a UriMapper Implementierung, die einfach den Namen der Originalseite ersetzt (MainPage.xaml) mit dem Namen der Zielseite (SharePage.xaml):

public class MyUriMapper: UriMapperBase public überschreiben Uri MapUri (Uri uri) string tempUri = uri.ToString (); Zeichenfolge mappedUri; if ((tempUri.Contains ("SharePhotoContent")) && (tempUri.Contains ("FileId"))) // Umleitung zu PhotoShare.xaml. mappedUri = tempUri.Replace ("MainPage", "SharePage"); neuen Uri zurückgeben (kartografiertUri, UriKind.Relative);  return uri; 

Nachdem der Benutzer zur Freigabeseite umgeleitet wurde, können wir eine aufgerufene Methode verwenden GetPictureFromToken () ausgesetzt durch die Medienbibliothek Klasse. Es akzeptiert die eindeutige Bild-ID als Parameter und gibt einen Verweis auf den zurück Bild Objekt, das das vom Benutzer ausgewählte Bild darstellt.

Die Bild-ID ist der aufgerufene Parameter FileId die wir in der URI erhalten haben, als die Anwendung geöffnet wurde. Im folgenden Beispiel können Sie sehen, wie wir den Parameter mit dem Parameter abrufen OnNavigatedTo Ereignis, das ausgelöst wird, wenn der Benutzer zur Freigabeseite umgeleitet wird, und verwendet dieses, um das ausgewählte Bild mit einem Symbol anzuzeigen Bild Steuerung.

protected überschreibt void OnNavigatedTo (NavigationEventArgs e) if (NavigationContext.QueryString.ContainsKey ("FileId")) Zeichenfolge fileId = NavigationContext.QueryString ["FileId"]; Medienbibliothek Bibliothek = neue Medienbibliothek (); Picture picture = library.GetPictureFromToken (fileId); BitmapImage image = new BitmapImage (); image.SetSource (picture.GetImage ()); ShareImage.Source = Bild; 

Andere Integrationsfunktionen

Es gibt andere Möglichkeiten, unsere Anwendung mit dem Photos Hub zu integrieren. Sie arbeiten alle auf dieselbe Weise:

  • Der Manifestdatei muss eine Deklaration hinzugefügt werden.
  • Die Anwendung wird mit einem Spezial geöffnet Uri dass Sie mit einem abfangen müssen UriMapper Klasse.
  • Der Benutzer wird auf eine dedizierte Seite umgeleitet, auf der Sie das ausgewählte Bild mithilfe von aufrufen können FileId Parameter.

Listen Sie die Anwendung als fotografische App auf

Dies ist die einfachste Integration, da die Anwendung nur im Apps-Abschnitt des Photos Hub angezeigt wird. Um dies zu unterstützen, müssen Sie lediglich die folgende Deklaration in die Manifestdatei einfügen:

  

Es ist nichts anderes erforderlich, da diese Art der Integration lediglich einen schnellen Link in den Photos Hub enthält. Die Anwendung wird normal geöffnet, als ob sie mit dem Haupt-App-Symbol geöffnet wurde.

Integrieren mit der Bearbeitungsoption

Eine weitere Option, die in der Anwendungsleiste der Seite mit den Fotodetails verfügbar ist, wird aufgerufen bearbeiten. Wenn der Benutzer darauf tippt, zeigt Windows Phone eine Liste von Anwendungen an, die die Fotobearbeitung unterstützen. Nach der Auswahl erwartet der Benutzer eine Weiterleitung zu einer Anwendungsseite, auf der das ausgewählte Bild bearbeitet werden kann.

Die folgende Deklaration sollte in die Manifestdatei eingefügt werden:

  

Wenn diese Funktion aktiviert ist, wird Ihre Anwendung mit dem folgenden URI geöffnet:

/MainPage.xaml?Action=EditPhotoContent&FileId=%7B1ECC86A2-CDD7-494B-A9A8-DBD9B4C4AAC7%7D

Dies ist das Uri , um Benutzer auf die richtige Seite umzuleiten, auf der Sie das ausgewählte Bild mit Hilfe von aufrufen können FileId Parameter, wie wir es für die Fotofreigabe getan haben.

Rich Media-Apps

Rich Media-Apps sind Anwendungen, die Bilder aufnehmen und in der Bibliothek des Benutzers speichern können. Wenn Benutzer eines dieser Fotos öffnen, sehen sie:

  • Text unter dem Foto mit der Meldung „Von erfasst“ gefolgt vom Namen der App
  • Eine neue Option in der Anwendungsleiste mit der Bezeichnung "Öffnen in" gefolgt vom Namen der App

Dieser Ansatz ähnelt den Freigabe- und Bearbeitungsfunktionen. Der Unterschied besteht darin, dass die Rich Media-Apps nur für Bilder verfügbar sind, die in der Anwendung aufgenommen wurden, während Bearbeitungs- und Freigabefunktionen für jedes Foto verfügbar sind, unabhängig davon, wie sie aufgenommen wurden.

Die folgende Deklaration sollte im Manifest hinzugefügt werden, um die Integration von Rich Media-Apps zu ermöglichen:

  

In diesem Szenario wird die Anwendung mit dem folgenden URI geöffnet:

/MainPage.xaml?Action=RichMediaEdit&FileId=%7B1ECC86A2-CDD7-494B-A9A8-DBD9B4C4AAC7%7D

Wie Sie sehen, ist der URI immer derselbe; Was ändert sich, ist der Wert von Aktion Parameter-in diesem Fall, RichMediaEdit.

Dies ist der URI, den Sie mit Ihrem abfangen müssen UriMapper Implementierung. Sie müssen Benutzer auf eine Seite Ihrer Anwendung umleiten, die das ausgewählte Bild verwalten kann.

Fazit

In diesem Lernprogramm haben wir viele Möglichkeiten zum Erstellen einer großartigen Multimedia-Anwendung für Windows Phone kennen gelernt:

  • Kamerafunktionen integrieren, um Fotos und Videos aufzunehmen
  • Interaktion mit der Medienbibliothek, um Zugriff auf Bilder und Audio zu erhalten
  • Integration in das native Kameraerlebnis, um Benutzern den Zugriff auf erweiterte Funktionen direkt im Photos Hub zu ermöglichen

Dieses Tutorial stellt ein Kapitel von Windows Phone 8 dar. Erfolgreich ein kostenloses eBook des Teams von Syncfusion.