Windows Phone 8 bondig multimediatoepassingen

In deze zelfstudie gaan we ons richten op het maken van een multimediatoepassing voor Windows Phone door gebruik te maken van de camera van het apparaat, interactie met de mediabibliotheek en de mogelijkheden van de Photos Hub te verkennen.

De camera gebruiken

De camera is een van de belangrijkste functies op Windows Phone-apparaten, vooral dankzij Nokia, dat een aantal van de beste cameratelefoons op de markt heeft gecreëerd.

Als ontwikkelaars zijn we in staat om de camera-ervaring te integreren in onze applicatie, zodat gebruikers foto's kunnen maken en ze direct in de applicatie kunnen bewerken. Bovendien, met de Lens App-functie die we later bespreken, is het nog eenvoudiger om applicaties te maken die de native camera-ervaring kunnen vervangen.

Opmerking: om interactie met de camera mogelijk te maken, moet u de ID_CAP_IS_CAMERA mogelijkheid in het manifestbestand.

De eerste stap is om een ​​gebied op de pagina te maken waar we het beeld kunnen weergeven dat door de camera is opgenomen. We gaan gebruiken VideoBrush, Dit is een van de native XAML-penselen waarmee een video kan worden ingesloten. We zullen het gebruiken als een achtergrond van a Canvas controle, zoals getoond in het volgende voorbeeld:

        

Let op de CompositeTransform dat is toegepast; het doel is om de juiste oriëntatie van de video te behouden, op basis van de oriëntatie van de camera.

Nemen van foto's

Nu we een plaats hebben om de live camerafeed weer te geven, kunnen we de API's gebruiken die zijn opgenomen in de Windows.Phone.Media.Capture namespace. Specifiek wordt de klasse die beschikbaar is om foto's te maken aangeroepen PhotoCaptureDevice (later zullen we een andere klas zien voor het opnemen van video's).

De volgende code is een voorbeeldinitialisatie:

protected override async void OnNavigatedTo (NavigationEventArgs e) Size resolution = PhotoCapture Device.GetAvailableCaptureResolutions (CameraSensorLocation.Back) .First (); PhotoCaptureDevice camera = wacht op PhotoCaptureDevice.OpenAsync (CameraSensorLocation.Back, resolution); video.SetSource (camera); previewTransform.Rotation = camera.SensorRotationInDegrees; 

Voordat we de live feed initialiseren, moeten we twee keuzes maken: welke camera we moeten gebruiken en welke van de beschikbare resoluties we willen gebruiken.

We bereiken dit door het GetAvailableCaptureResolutions () methode op de PhotoCaptureDevice klasse, doorgevend als parameter a CameraSensorLocation object dat de camera vertegenwoordigt die we gaan gebruiken. De methode retourneert een verzameling van de ondersteunde resoluties, die worden geïdentificeerd door de Grootte klasse.

Tip: het is veilig om de vorige code te gebruiken, omdat elk Windows Phone-apparaat een camera aan de achterkant heeft. Als we in plaats daarvan contact willen maken met de camera aan de voorkant, is het beter om eerst te controleren of er een beschikbaar is, omdat niet alle Windows Phone-apparaten er een hebben. Om dit te doen, kunt u de AvailableSensorLocation eigendom van de PhotoCaptureDevice klasse, een verzameling van alle ondersteunde camera's.

Zodra we hebben besloten welke resolutie we moeten gebruiken, kunnen we deze als parameter (samen opnieuw met de geselecteerde camera) doorgeven aan de OpenAsync () methode van de PhotoCaptureDevice klasse. Het zal terugkeren a PhotoCaptureDevice object dat de live feed bevat; we moeten het gewoon doorgeven aan de SetSource () methode van de VideoBrush

Zoals eerder vermeld, hanteren we de camera-oriëntatie met behulp van de transformatie die we hebben toegepast op de VideoBrush: we hebben de omwenteling de ... gebruiken SensorRotationInDegrees eigenschap die de rotatie van de huidige hoek bevat.

Opmerking: mogelijk krijg je een foutmelding als je een a probeert te halen PhotoCaptureDevice object als een parameter van de SetSource () methode van de VideoBrush. Als dat zo is, moet u het toevoegen Microsoft.Devices naamruimte voor uw klas, omdat deze een uitbreidingsmethode bevat voor de SetSource () methode die de ondersteunt PhotoCaptureDevice klasse.

Nu toont de applicatie gewoon de livefeed van de camera op het scherm. De volgende stap is om de foto te maken.

De techniek die door de API wordt gebruikt, is om een ​​reeks frames te maken en deze als een stream op te slaan. Helaas is er een beperking in de huidige SDK: u kunt slechts één foto tegelijk maken, dus u kunt alleen reeksen van één frame gebruiken.

private async void OnTakePhotoClicked (object afzender, RoutedEventArgs e) CameraCaptureSequence cameraCaptureSequence = camera.CreateCaptureSequence (1); MemoryStream stream = nieuwe MemoryStream (); cameraCaptureSequence.Frames [0] .CaptureStream = stream.AsOutputStream (); wacht op camera.PrepareCaptureSequenceAsync (cameraCaptureSequence); wacht op cameraCaptureSequence.StartCaptureAsync (); stream.Seek (0, SeekOrigin.Begin); MediaLibrary-bibliotheek = nieuwe MediaLibrary (); library.SavePictureToCameraRoll ("picture1.jpg", stream); 

Het proces begint met een CameraCaptureSequence object, dat de vangststroom vertegenwoordigt. Als gevolg van de eerder genoemde single-picutre beperking, kunt u de CreateCaptureSequence () methode van de PhotoCaptureDevice klasse alleen door te passeren 1 als zijn parameter.

Om dezelfde reden gaan we gewoon werken met het eerste frame van de reeks die is opgeslagen in de frames verzameling. De CaptureStream eigenschap van het frame moet worden ingesteld met de stream die we gaan gebruiken om de vastgelegde afbeelding op te slaan. In de vorige steekproef gebruiken we een MemoryStream om de foto in het geheugen op te slaan. Op deze manier kunnen we het later opslaan in de Foto Hub van de gebruiker (met name in het Filmrol-album).

Opmerking: om te communiceren met de Mediatheek klasse moet je de ID_CAP_MEDIALIB_PHOTO mogelijkheid in het manifestbestand.

U kunt ook veel instellingen van de camera aanpassen door de SetProperty () methode op de PhotoCaptureDevice object dat twee parameters vereist: de eigenschap die moet worden ingesteld en de waarde die moet worden toegewezen. De beschikbare eigenschappen worden gedefinieerd door twee tellers: KnownCameraGeneralProperties, welke de algemene camera-eigenschappen bevat, en KnownCameraPhotoProperties, die de fotospecifieke eigenschappen bevat.

Sommige eigenschappen zijn alleen-lezen, dus de enige bewerking die u kunt uitvoeren, is om hun waarden te verkrijgen met behulp van de GetProperty () methode.

In de volgende voorbeelden gebruiken we de SetProperty () methode om de flitsmodus in te stellen en GetProperty () om de informatie te krijgen als de huidige regio telefoons dwingt een geluid af te spelen wanneer ze een foto maken.

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

Merk op dat de GetProperty () methode retourneert altijd een generiek object, dus u moet het handmatig casten op basis van de eigenschappen die u opvraagt.

U kunt een lijst met alle beschikbare eigenschappen in de MSDN-documentatie bekijken.

De hardware cameratoets gebruiken

Meestal hebben Windows Phone-apparaten een speciale knop voor de camera, die zowel kan worden gebruikt om de focus in te stellen door deze half in te drukken, als om de foto te maken door deze volledig in te drukken. U kunt deze knop ook gebruiken in uw toepassingen door u te abonneren op drie evenementen die worden getoond door de CameraButtons statische klasse:

  • ShutterKeyPressed wordt geactiveerd wanneer op de knop wordt gedrukt.
  • ShutterKeyReleased wordt geactiveerd wanneer de knop wordt losgelaten.
  • ShutterKeyHalfPressed wordt geactiveerd als de knop half ingedrukt is.

In het volgende voorbeeld zijn we geabonneerd op de ShutterKeyReleased evenement om een ​​foto te maken en de ShutterKeyHalfPressed gebeurtenis om de autofocusfunctie te gebruiken.

public Camera () InitializeComponent (); CameraButtons.ShutterKeyReleased + = CameraButtons_ShutterKeyReleased; CameraButtons.ShutterKeyHalfPressed + = CameraButtons_ShutterKeyHalfPressed;  async void CameraButtons_ShutterKeyHalfPressed (object afzender, EventArgs e) wacht op camera.FocusAsync ();  void CameraButtons_ShutterKeyReleased (object afzender, EventArgs e) // Maak de foto. 

Een video opnemen

Het proces om een ​​video op te nemen is vergelijkbaar met degene die we gebruikten om een ​​foto te maken. In dit geval gaan we de gebruiken AudioVideoCaptureDevice klasse in plaats van de PhotoCaptureDevice klasse. Zoals u in het volgende voorbeeld kunt zien, is de initialisatieprocedure hetzelfde: we beslissen welke resolutie en camera we willen gebruiken en we geven de geretourneerde live feed weer met een VideoBrush.

Opmerking: om video's op te nemen, moet u ook de ID_CAP_MICROPHONE mogelijkheid in het manifestbestand.

protected override async void OnNavigatedTo (NavigationEventArgs e) Grootte resolutie = AudioVideoCaptureDevice.GetAvailableCaptureResolutions (CameraSensorLocation.Back) .First (); videoDevice = wachten op AudioVideoCaptureDevice.OpenAsync (CameraSensorLocation.Back, resolution); video.SetSource (videoDevice); previewTransform.Rotation = videoDevice.SensorRotationInDegrees; 

Het opnemen van een video is zelfs eenvoudiger sinds de AudioVideoCaptureDevice klasse onthult de StartRecordingToStreamAsync () methode, waarbij u eenvoudigweg opgeeft waar de opgenomen gegevens moeten worden opgeslagen. Omdat het een video is, heb je ook een manier nodig om de opname te stoppen; dit is het doel van de StopRecordingAsync () methode.

In het volgende voorbeeld wordt de opname opgeslagen in een bestand dat is gemaakt in de lokale opslag:

privé AudioVideoCaptureDevice videoDevice; privé IRandomAccessStream-stream; privé StorageFile-bestand; openbare VideoRecording () InitializeComponent ();  private async void OnRecordVideoClicked (object afzender, RoutedEventArgs e) file = wacht op ApplicationData.Current.LocalFolder.CreateFileAsync ("video.wmv", CreationCollisionOption.ReplaceExisting); stream = wacht op bestand.OpenAsync (FileAccessMode.ReadWrite); videoDevice.StartRecordingToStreamAsync (stroom);  private async void OnStopRecordingClicked (object afzender, RoutedEventArgs e) await videoDevice.StopRecordingAsync (); wacht op stream.FlushAsync (); 

U kunt het resultaat van de bewerking eenvoudig testen met behulp van de MediaPlayerLauncher klasse om de opname te spelen:

private void OnPlayVideoClicked (object afzender, RoutedEventArgs e) MediaPlayerLauncher launcher = nieuwe MediaPlayerLauncher media = nieuwe Uri (file.Path, UriKind.Relative); launcher.Show (); 

De SDK biedt een specifieke lijst met aanpasbare instellingen verbonden met video-opnames. Ze zijn beschikbaar in de KnownCameraAudioVideoProperties teller.

Interactie met de mediabibliotheek

Het framework biedt een klasse genaamd Mediatheek, die kan worden gebruikt om te communiceren met de mediabibliotheek van de gebruiker (foto's, muziek, enz.). Laten we eens kijken hoe we dit kunnen gebruiken om de meest voorkomende scenario's te beheren.

Opmerking: in de huidige versie is er geen manier om te communiceren met de bibliotheek om nieuwe video's op te slaan in de Filmrol, noch om toegang te krijgen tot de stroom bestaande video's.

Afbeeldingen

De Mediatheek klasse kan worden gebruikt om toegang te krijgen tot de foto's die zijn opgeslagen in de Photos Hub, dankzij de Afbeeldingen verzameling. Het is een verzameling van afbeelding objecten, waarbij elke afbeelding staat voor een foto die is opgeslagen in de Photos Hub.

Opmerking: u moet de. Inschakelen ID_CAP_MEDIALIB_PHOTO mogelijkheid in het manifestbestand om toegang te krijgen tot de afbeeldingen die zijn opgeslagen in de Photos Hub.

De Afbeeldingen collectie geeft toegang tot de volgende albums:

  • Fotorol
  • Opgeslagen afbeeldingen
  • screenshots

Alle andere albums die worden weergegeven in de People Hub die afkomstig zijn van externe services zoals SkyDrive of Facebook, kunnen niet worden geopend via de Mediatheek klasse.

Tip: het Mediatheek klasse onthult een verzameling genaamd SavedPictures, die alleen de afbeeldingen bevat die zijn opgeslagen in het album Opgeslagen afbeeldingen.

elk afbeelding object biedt enkele eigenschappen om toegang te krijgen tot de basisinformatie, zoals Naam, Breedte, en Hoogte. Een zeer belangrijke eigenschap is Album, die de referentie bevat van het album waar de afbeelding is opgeslagen. Bovendien krijgt u toegang tot verschillende streams voor het geval u de afbeelding wilt bewerken of weergeven in uw toepassing:

  • De GetPicture () methode retourneert de stream van de originele afbeelding.
  • De GetThumbnail () methode retourneert de stroom van de miniatuur, die een versie met een lage resolutie van de originele afbeelding is.
  • Als u de PhoneExtensions naamruimte voor uw klas, kunt u de GetPreviewImage () methode, die een voorbeeldafbeelding retourneert. De resolutie en grootte zijn tussen de originele afbeelding en de miniatuur.

In het volgende voorbeeld genereren we de miniatuur van de eerste beschikbare afbeelding in de filmrol en geven deze weer met een Beeld controle:

private void OnSetPhotoClicked (object afzender, RoutedEventArgs e) MediaLibrary library = new MediaLibrary (); Afbeelding afbeelding = library.Pictures.FirstOrDefault (x => x.Album.Name == "Camera Roll"); if (picture! = null) BitmapImage image = new BitmapImage (); image.SetSource (picture.GetThumbnail ()); Thumbnail.Bron = afbeelding; 

Tip: om te communiceren met de Mediatheek klas met behulp van de emulator, moet je de Photos Hub minstens één keer openen; anders krijg je een lege verzameling foto's wanneer je de Afbeeldingen eigendom.

Met de Mediatheek klasse, kunt u ook het tegenovergestelde doen: maak een foto in uw toepassing en sla deze op in de People Hub. We hebben al een voorbeeld gezien toen we het hadden over de integratie van de camera in onze applicatie; we kunnen de foto opslaan in de camerarol (met behulp van de SavePictureToCameraRoll () methode) of in het album Opgeslagen afbeeldingen (met behulp van de Sla afbeelding op() methode). In beide gevallen zijn de vereiste parameters de naam van de afbeelding en de bijbehorende stroom.

In het volgende voorbeeld downloaden we een afbeelding van internet en slaan deze op in het album Saved Pictures:

private async void OnDownloadPhotoClicked (object afzender, RoutedEventArgs e) HttpClient client = new HttpClient (); Stream stream = wacht op client.GetStreamAsync ("http://www.syncfusion.com/Content/en-US/Home/Images/syncfusion-logo.png"); MediaLibrary-bibliotheek = nieuwe MediaLibrary (); library.SavePicture ("logo.jpg", stream); 

Muziek

De Mediatheek klasse biedt veel opties voor toegang tot muziek, maar er zijn enkele beperkingen die niet aanwezig zijn bij het werken met afbeeldingen. 

Opmerking: u moet de. Inschakelen ID_CAP_MEDIALIB_AUDIO mogelijkheid in het manifestbestand om toegang te krijgen tot de afbeeldingen die zijn opgeslagen in de Photos Hub. 

De volgende collecties worden getoond door de Mediatheek klas voor toegang tot muziek:

  • albums om toegang te krijgen tot muziekalbums.
  • songs om toegang te krijgen tot alle beschikbare nummers.
  • Genres om toegang te krijgen tot de nummers gegroepeerd op genre.
  • afspeellijsten om toegang te krijgen tot afspeellijsten.

Elk nummer wordt geïdentificeerd door de lied klasse, die alle algemene informatie over een muziektrack bevat die rechtstreeks uit de ID3-tag is genomen: Album, Artiest, Titel, tracknumber, enzovoorts.

Helaas is er geen toegang tot de stream van een nummer, dus de enige manier om nummers af te spelen is door de Mediaspeler klasse, die deel uitmaakt van de Microsoft.XNA.Framework.Media namespace. Deze klasse biedt veel methoden om met tracks te communiceren. De Spelen() methode accepteert als een parameter a lied object, opgehaald uit de Mediatheek.

In de volgende sample reproduceren we het eerste nummer dat beschikbaar is in de bibliotheek:

private void OnPlaySong (object afzender, RoutedEventArgs e) MediaLibrary bibliotheek = nieuwe MediaLibrary (); Songsong = library.Songs.FirstOrDefault (); MediaPlayer.Play (lied); 

Met een van de nieuwe functies die zijn geïntroduceerd in Windows Phone 8, kunt u een nummer dat is opgeslagen in de lokale opslag van de toepassing opslaan in de mediabibliotheek, zodat deze kan worden afgespeeld door de oorspronkelijke Hub muziek + video's. Dit vereist de Microsoft.Xna.Framework.Media.PhoneExtensions naamruimte die aan uw klas moet worden toegevoegd.

private async void OnDownloadMusicClicked (object afzender, RoutedEventArgs e) MediaLibrary library = new MediaLibrary (); SongMetadata metadata = new SongMetadata AlbumName = "Een golf van bloed naar het hoofd", ArtistName = "Coldplay", Name = "Clocks"; library.SaveSong (nieuwe Uri ("song.mp3", UriKind.RelativeOrAbsolute), metadata, SaveSongOperation.CopyToLibrary); 

De SaveSong () methode vereist drie parameters, zoals getoond in het vorige voorbeeld:

  • Het pad van het nummer dat u wilt opslaan. Het is een relatief pad dat verwijst naar de lokale opslag.
  • De metadata van de nummers, die wordt geïdentificeerd door de SongMetadata klasse. Het is een optionele parameter; als je slaagt nul, Windows Phone extraheert automatisch de ID3-informatie uit het bestand.
  • EEN SaveSongOperation object, dat de mediabibliotheek vertelt of het bestand moet worden gekopieerd (CopyToLibrary) of verplaatst (MoveToLibrary) zodat het uit de opslag wordt verwijderd.

Lens-apps

Windows Phone 8 heeft nieuwe functies geïntroduceerd die specifiek zijn voor fotografische toepassingen. Enkele van de meest interessante worden genoemd lens apps, die verschillende filters en effecten toepassen op afbeeldingen. Windows Phone biedt een manier om gemakkelijk te schakelen tussen verschillende camera-applicaties om filters on-the-fly toe te passen.

Lens-apps zijn normale Windows Phone-applicaties die communiceren met de camera-API's die we aan het begin van dit artikel gebruikten. Het verschil is dat een lens-app wordt weergegeven in de lenzen gedeelte van de native Camera-app; wanneer gebruikers op de cameraknop drukken, wordt een speciale weergave met alle beschikbare lens-apps weergegeven. Op deze manier kunnen ze eenvoudig overschakelen naar een andere applicatie om de foto te maken.

Integratie met de lenzenweergave vertrekt vanuit het manifestbestand, dat handmatig moet worden bewerkt door het te kiezen Bekijk code optie in het contextmenu. De volgende code moet worden toegevoegd in de Uitbreiding sectie:

  

Elke lens-app heeft een specifiek pictogram nodig dat wordt weergegeven in de lenzenweergave. Pictogrammen worden automatisch opgehaald uit de Middelen map op basis van een naamgevingsconventie. Voor elke ondersteunde resolutie moet een pictogram worden toegevoegd met behulp van de conventies in de volgende tabel:

Resolutie

Pictogram grootte

Bestandsnaam

480 × 800

173 × 173

Lens.Screen-WVGA.png

768 × 1280

277 × 277

Lens.Screen-WXGA.png

720 × 1280

259 × 259

Lens.Screen-720p.png

De UriMapper les is vereist voor het werken met lens-apps. Lens-apps worden zelfs geopend met een speciale URI die moet worden onderschept en beheerd. De volgende code is een voorbeeld Uri:

/MainPage.xaml?Action=ViewfinderLaunch

Wanneer dit Uri wordt onderschept, gebruikers moeten worden doorgestuurd naar de applicatiepagina die de foto maakt. In het volgende voorbeeld ziet u a UriMapper implementatie die gebruikers doorstuurt naar een pagina met de naam Camera.xaml wanneer de toepassing wordt geopend vanuit de lensweergave.

public class MyUriMapper: UriMapperBase openbare overschrijving Uri MapUri (Uri uri) string tempUri = uri.ToString (); if (tempUri.Contains ("ViewfinderLaunch")) return new Uri ("/ Camera.xaml", UriKind.Relative);  else terugkeer uri; 

Ondersteuning delen

Als u een toepassing hebt ontwikkeld die het delen van foto's ondersteunt, zoals een sociale netwerkclient, kunt u deze integreren in de Delen menu van de Photos Hub. Gebruikers kunnen deze optie vinden in de toepassingsbalk op de pagina met fotodetails.

Wanneer gebruikers voor deze optie kiezen, geeft Windows Phone een lijst met applicaties weer die geregistreerd zijn om delen te ondersteunen. We kunnen onze applicatie toevoegen aan de lijst door simpelweg een nieuwe extensie toe te voegen in het manifestbestand, zoals we hebben gedaan om lensondersteuning toe te voegen.

We moeten de volgende verklaring handmatig toevoegen in de uitbreidingen sectie:

  

Wanneer gebruikers onze toepassing kiezen in de lijst, wordt deze geopend met de volgende URI:

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

Nogmaals, we kunnen een UriMapper implementatie om gebruikers om te leiden naar de pagina van onze applicatie die de functie voor delen biedt. Het is ook belangrijk om de FiledId parameter op deze pagina; we hebben het nodig om te weten welke foto door de gebruiker is geselecteerd.

Het volgende voorbeeld toont een UriMapper implementatie die simpelweg de naam van de originele pagina vervangt (MainPage.xaml) met de naam van de doelpagina (SharePage.xaml):

public class MyUriMapper: UriMapperBase openbare overschrijving Uri MapUri (Uri uri) string tempUri = uri.ToString (); string mappedUri; if ((tempUri.Contains ("SharePhotoInhoud")) && (tempUri.Contains ("FileId"))) // Doorverwijzen naar PhotoShare.xaml. mappedUri = tempUri.Replace ("MainPage", "SharePage"); retourneer nieuwe Uri (mappedUri, UriKind.Relative);  terug uri; 

Nadat de gebruiker is omgeleid naar de deelpagina, kunnen we een methode gebruiken genaamd GetPictureFromToken () blootgesteld door de Mediatheek klasse. Het accepteert de unieke foto-ID als een parameter en retourneert een verwijzing naar de afbeelding object dat de afbeelding vertegenwoordigt die door de gebruiker is geselecteerd.

De afbeelding-ID is de parameter genaamd fileId die we hebben ontvangen in de URI toen de toepassing werd geopend. In het volgende voorbeeld kunt u zien hoe we de parameter ophalen met behulp van de OnNavigatedTo gebeurtenis die wordt geactiveerd wanneer de gebruiker wordt omgeleid naar de deelpagina en deze gebruikt om de geselecteerde foto weer te geven met een Beeld controle.

protected override void OnNavigatedTo (NavigationEventArgs e) if (NavigationContext.QueryString.ContainsKey ("FileId")) string fileId = NavigationContext.QueryString ["FileId"]; MediaLibrary-bibliotheek = nieuwe MediaLibrary (); Afbeelding afbeelding = bibliotheek.GetPictureFromToken (fileId); BitmapImage image = new BitmapImage (); image.SetSource (picture.GetImage ()); ShareImage.Bron = afbeelding; 

Andere integratiefuncties

Er zijn andere manieren om onze applicatie te integreren met de Photos Hub. Ze werken allemaal op dezelfde manier:

  • Er moet een verklaring aan het manifestbestand worden toegevoegd.
  • De applicatie wordt geopend met behulp van een special Uri dat je moet onderscheppen met een UriMapper klasse.
  • De gebruiker wordt doorgestuurd naar een speciale pagina waarin u de geselecteerde afbeelding kunt ophalen met behulp van de fileId parameter.

Maak een lijst van de applicatie als een fotografische app

Dit is de eenvoudigste integratie omdat deze de toepassing alleen weergeeft in het gedeelte Apps van de Photos Hub. Om dit te ondersteunen, hoeft u alleen de volgende verklaring toe te voegen in het manifestbestand:

  

Er is niets anders nodig, omdat dit soort integratie eenvoudigweg een snelle link in de Fotoshub bevat. De applicatie wordt normaal geopend, alsof deze is geopend met behulp van het hoofdapp-pictogram.

Integratie met de bewerkingsoptie

Een andere optie die beschikbaar is in de toepassingsbalk van de fotodetailspagina, wordt aangeroepen Bewerk. Wanneer de gebruiker erop tikt, geeft Windows Phone een lijst met toepassingen weer die fotobewerking ondersteunen. Nadat u er een hebt gekozen, verwacht de gebruiker omgeleid te worden naar een toepassingspagina waar de geselecteerde afbeelding kan worden bewerkt.

De volgende verklaring moet worden toegevoegd aan het manifestbestand:

  

Wanneer deze functie is ingeschakeld, wordt uw toepassing geopend met de volgende URI:

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

Dit is de Uri te onderscheppen om gebruikers om te leiden naar de juiste pagina waar u de geselecteerde afbeelding kunt ophalen met behulp van de fileId parameter, zoals we deden voor de functie voor het delen van foto's.

Rich Media-apps

Rich media-apps zijn applicaties die in staat zijn om foto's te maken en op te slaan in de bibliotheek van de gebruiker. Wanneer gebruikers een van deze foto's openen, zien ze:

  • tekst onder de foto met het bericht "vastgelegd door" gevolgd door de naam van de app
  • een nieuwe optie in de applicatiebalk genaamd "open in" gevolgd door de naam van de app

Deze aanpak is vergelijkbaar met de functies voor delen en bewerken. Het verschil is dat de integratie van rich media-apps alleen beschikbaar is voor foto's die met de toepassing zijn gemaakt, terwijl bewerkings- en deelfuncties beschikbaar zijn voor elke foto, ongeacht hoe ze zijn gemaakt.

De volgende verklaring moet worden toegevoegd aan het manifest om integratie met rich media-apps mogelijk te maken:

  

In dit scenario wordt de toepassing geopend met de volgende URI:

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

Zoals u kunt zien, is de URI altijd hetzelfde; welke veranderingen is de waarde van de Actie parameter - in dit geval, RichMediaEdit.

Dit is de URI die u moet onderscheppen met uw UriMapper implementatie. U moet gebruikers omleiden naar een pagina van uw toepassing die de geselecteerde foto kan beheren.

Conclusie

In deze zelfstudie hebben we veel manieren geleerd om een ​​geweldige multimediatoepassing voor Windows Phone te maken door:

  • camera-functies integreren om foto's te maken en video's op te nemen
  • interactie met de mediabibliotheek om toegang te krijgen tot afbeeldingen en audio
  • integratie met de native camera-ervaring om gebruikers rechtstreeks toegang te geven tot geavanceerde functies in de Photos Hub

Deze tutorial staat voor een hoofdstuk uit Windows Phone 8 Shortlyly, een gratis eBoek van het team van Syncfusion.