Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1907, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WinRT: impostare da codice l'immagine dell'utente

Come sapete, in Windows 8 ciascun utente può avere un'immagine identificativa, come una fotografia. Non è una novità di Windows 8, ma in questo post vediamo come gestire la cosa da una Windows Store App.

Fate bene attenzione: ogni app può cambiare questa impostazione, ma non è detto che lo debba fare per forza. Ad esempio, ha senso che un'app di fotoritocco permetta di fare questa attività, ma un notiziario difficilmente avrà necessità di farlo. Questa piccola premessa è necessaria, oltre che per un discorso di uso dell'app, anche per delle capabilities di cui parliamo dopo.

Si usa la classe Windows.System.UserProfile.UserInformation, la quale espone 4 metodi asincroni:

  • SetAccountPictureAsync, che prende l'immagine da un oggetto StorageFile
  • SetAccountPictureFromStreamAsync, che prende l'immagine da un oggetto di tipo RandomAccessStream
  • SetAccountPicturesAsync, simile al primo ma che in un sol colpo prende un'immagine piccola, una grande e un video
  • SetAccountPicturesAsyncFromStream, come il precedente ma che prende le info da un RandomAccessStream piuttosto che da oggetti StorageFile

Il seguente codice mostra come ottenere uno StorageFile consentendo all'utente di selezionare un file su disco attraverso un FileOpenPicker e come sia possibile impostare l'immagine utente attraverso il metodo SetAccountPictureAsync:

    'Richiede le seguenti direttive:
    'Imports Windows.Storage.Pickers
    'Imports Windows.System.UserProfile
    'Imports Windows.Storage
    Private Async Function SetUserPictureAsync() As Task
        Dim openPicker As New FileOpenPicker
        openPicker.FileTypeFilter.Add(".jpg")
        openPicker.FileTypeFilter.Add(".jpeg")
 
        Dim pictureFile As StorageFile = Await openPicker.PickSingleFileAsync()
        If pictureFile IsNot Nothing Then
            Dim result As SetAccountPictureResult = Await UserInformation.SetAccountPictureAsync(pictureFile)
 
            If result = SetAccountPictureResult.Success Then
                'operazione andata a buon fine
            ElseIf result = SetAccountPictureResult.ChangeDisabled Then
                'l'utente non ha accettato la modifica
            ElseIf result = SetAccountPictureResult.FileSizeError Then
                'il file è troppo grande
            ElseIf result = SetAccountPictureResult.LargeOrDynamicError Then
                'l'immagine è troppo grande
            ElseIf result = SetAccountPictureResult.Failure Then
                'errore generico
            End If
        End If
    End Function

Si noti come sia possibile conoscere l'esito dell'operazione attraverso il risultato di tipo SetAccountPictureResult.

Affinché il codice possa essere certificato e riconosciuto correttamente dal sistema, nel manifest del Package dobbiamo specificare la dichiarazione Account Picture Provider.

Questo ha una importante conseguenza: la nostra app verrà mostrata nelle impostazioni relative all'immagine dell'account, come si vede nella seguente figura:

Ciò significa che l'utente avrà la possibilità di scegliere la nostra app come strumento per cambiare l'immagine utente e l'app stessa deve essere in grado di reagire alla selezione in questa finestra.

L'aver scelto la dichiarazione Account Picture Provider, abilita un protocollo chiamato ms-accountpictureprovider. Nel metodo OnActivated della classe App, dobbiamo capire se l'attivazione dell'app stessa avviene tramite un protocollo e, se si, se si tratta del protocollo di nostro interesse:

    Protected Overrides Sub OnActivated(args As IActivatedEventArgs)
        If args.Kind = ActivationKind.Protocol Then
 
            Dim protocolArgs = CType(args, ProtocolActivatedEventArgs)
            If protocolArgs.Uri.Scheme = "ms-accountpictureprovider" Then
                'l'utente ha richiesto di aprire l'app 
                'per modificare l'immagine dalle impostazioni PC
            End If
        End If
    End Sub

A questo punto si potrà invocare, ad esempio, il precedente codice per consentire la scelta dell'immagine da disco e impostarla.

Alessandro

Print | posted on mercoledì 8 maggio 2013 11:55 | Filed Under [ UWP e Windows Store Apps ]

Powered by:
Powered By Subtext Powered By ASP.NET