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.
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.
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.
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.
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.
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.
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:
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:
GetPicture ()
Methode gibt den Stream des Originalbildes zurück.GetThumbnail ()
Diese Methode gibt den Stream der Miniaturansicht zurück, bei der es sich um eine Version mit niedriger Auflösung des Originalbilds handelt.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);
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:
SongMetadata
Klasse. Es ist ein optionaler Parameter. wenn du passierst Null
, Windows Phone extrahiert automatisch die ID3-Informationen aus der Datei.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.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;
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;
Es gibt andere Möglichkeiten, unsere Anwendung mit dem Photos Hub zu integrieren. Sie arbeiten alle auf dieselbe Weise:
Uri
dass Sie mit einem abfangen müssen UriMapper
Klasse.FileId
Parameter.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.
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 sind Anwendungen, die Bilder aufnehmen und in der Bibliothek des Benutzers speichern können. Wenn Benutzer eines dieser Fotos öffnen, sehen sie:
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.
In diesem Lernprogramm haben wir viele Möglichkeiten zum Erstellen einer großartigen Multimedia-Anwendung für Windows Phone kennen gelernt:
Dieses Tutorial stellt ein Kapitel von Windows Phone 8 dar. Erfolgreich ein kostenloses eBook des Teams von Syncfusion.