Il presente articolo è stato tradotto automaticamente.
.style0 { vertical-align:bottom; } .style1 { vertical-align:bottom; } .style2 { vertical-align:top; } .style3 { vertical-align:top; } .style4 { vertical-align:top; } .style5 { vertical-align:top; } .style6 { vertical-align:top; } .style7 { vertical-align:top; } .style8 { vertical-align:top; } .style9 { vertical-align:top; } .style10 { vertical-align:top; } .style11 { vertical-align:top; } .style12 { vertical-align:top; } .style13 { vertical-align:top; } .style14 { vertical-align:bottom; } .style15 { vertical-align:bottom; } .style16 { vertical-align:top; } .style17 { vertical-align:top; } .style18 { vertical-align:top; } .style19 { vertical-align:top; } .style20 { vertical-align:top; } .style21 { vertical-align:top; } .style22 { vertical-align:top; } .style23 { vertical-align:top; } .style24 { vertical-align:bottom; } .style25 { vertical-align:bottom; } .style26 { vertical-align:top; } .style27 { vertical-align:top; } .style28 { vertical-align:top; } .style29 { vertical-align:top; } .style30 { vertical-align:top; } .style31 { vertical-align:top; } .style32 { vertical-align:bottom; } .style33 { vertical-align:bottom; } .style34 { vertical-align:top; } .style35 { vertical-align:top; } .style36 { vertical-align:top; } .style37 { vertical-align:top; } .style38 { vertical-align:top; } .style39 { vertical-align:top; } .style40 { vertical-align:top; } .style41 { vertical-align:top; } .style42 { vertical-align:top; } .style43 { vertical-align:top; } .style44 { vertical-align:bottom; } .style45 { vertical-align:bottom; } .style46 { vertical-align:bottom; } .style47 { vertical-align:top; } .style48 { vertical-align:top; } .style49 { vertical-align:top; } .style50 { vertical-align:top; } .style51 { vertical-align:top; } .style52 { vertical-align:top; } .style53 { vertical-align:top; } .style54 { vertical-align:top; } .style55 { vertical-align:top; } .style56 { vertical-align:top; } .style57 { vertical-align:top; } .style58 { vertical-align:top; } .style59 { vertical-align:bottom; } .style60 { vertical-align:bottom; } .style61 { vertical-align:top; } .style62 { vertical-align:top; } .style63 { vertical-align:top; } .style64 { vertical-align:top; } .style65 { vertical-align:top; } .style66 { vertical-align:top; } .style67 { vertical-align:top; } .style68 { vertical-align:top; } .style69 { vertical-align:top; } .style70 { vertical-align:top; } .style71 { vertical-align:top; } .style72 { vertical-align:top; } .style73 { vertical-align:bottom; } .style74 { vertical-align:bottom; } .style75 { vertical-align:bottom; } .style76 { vertical-align:bottom; } .style77 { vertical-align:top; } .style78 { vertical-align:top; } .style79 { vertical-align:top; } .style80 { vertical-align:top; } .style81 { vertical-align:top; } .style82 { vertical-align:top; } .style83 { vertical-align:top; } .style84 { vertical-align:top; } .style85 { vertical-align:top; } .style86 { vertical-align:top; } .style87 { vertical-align:top; } .style88 { vertical-align:top; } .style89 { vertical-align:top; } .style90 { vertical-align:top; } .style91 { vertical-align:top; } .style92 { vertical-align:top; } .style93 { vertical-align:top; } .style94 { vertical-align:top; } .style95 { vertical-align:top; } .style96 { vertical-align:top; } .style97 { vertical-align:bottom; } .style98 { vertical-align:bottom; } .style99 { vertical-align:bottom; } .style100 { vertical-align:top; } .style101 { vertical-align:top; } .style102 { vertical-align:top; } .style103 { vertical-align:top; } .style104 { vertical-align:top; } .style105 { vertical-align:top; } .style106 { vertical-align:top; } .style107 { vertical-align:top; } .style108 { vertical-align:top; } .style109 { vertical-align:bottom; } .style110 { vertical-align:bottom; } .style111 { vertical-align:top; } .style112 { vertical-align:top; } .style113 { vertical-align:top; } .style114 { vertical-align:top; } .style115 { vertical-align:top; } .style116 { vertical-align:top; } .style117 { vertical-align:top; } .style118 { vertical-align:top; } .style119 { vertical-align:top; } .style120 { vertical-align:top; } .style121 { vertical-align:bottom; } .style122 { vertical-align:bottom; } .style123 { vertical-align:top; } .style124 { vertical-align:top; } .style125 { vertical-align:top; } .style126 { vertical-align:top; } .style127 { vertical-align:top; } .style128 { vertical-align:top; } .style129 { vertical-align:top; } .style130 { vertical-align:top; } .style131 { vertical-align:top; } .style132 { vertical-align:top; }
Windows 8
Creazione di app per Windows 8 e Windows Phone 8
Windows 8 e Windows Phone 8 sono su un percorso verso la convergenza. Nel frattempo, gli sviluppatori interessati a edificio per entrambe le piattaforme devono capire le principali somiglianze e differenze tra i due. Apprendimento dove il Windows 8 e Windows Phone Runtime APIs intersecano attualmente dà la migliore opportunità per distribuire le applicazioni per entrambi, sfruttando gran parte della conoscenza, strumenti, codice e risorse. In questo articolo, che esplorerò queste differenze e la psicoterapia che aiuta a capire che cosa è e non è possibile prima di iniziare a costruire una soluzione che si rivolge a entrambe le piattaforme.
La consistenza nell'UX — l'uso di piastrelle, l'interfaccia touch ricco, l'app bar e navigazione — semplifica la progettazione dell'applicazione e attuazione per entrambe le piattaforme. E l'adozione di una comune superficie API facilita la condivisione per un sacco di scenari di codice. È possibile scegliere le tecnologie giuste per le tue applicazioni: C#, Visual Basic o C++ o un ibrido per entrambe le piattaforme. Le risorse disponibili presso aka.ms/sharecode contengono grandi informazioni sulla creazione di applicazioni che girano su Windows Phone 8 e Windows 8 e presenti code-sharing tecniche per massimizzare il codice riutilizzare quando si costruisce per entrambi.
Specifiche aree di confronto
Per scrivere in modo efficace per due piattaforme, è necessario comprendere le differenze di funzionalità principali, come pure le caratteristiche che un elevato livello appaiono simili, ma hanno diverse implementazioni e API. Per tali caratteristiche, non dovrebbe essere tentato il riutilizzo del codice. Potrai esaminare tre principali aree di interesse:
- UX
- Modello di dati e codice di supporto
- Caratteristiche specifiche della piattaforma
UX
Fattori di forma sono una considerazione importante quando si progetta l'interfaccia utente per un'applicazione cross-platform. È necessario considerare gli attributi quali risoluzioni dello schermo, dimensioni dello schermo e orientamento del dispositivo di default. Interfaccia utente deve prendere decisioni per assicurare che l'esperienza è ottimizzata per l'utente dato i vincoli del dispositivo particolare attenzione.
Vi renderete rapidamente conto che non ha senso includere tutte le caratteristiche di un app Store di Windows in un'applicazione Windows Phone 8 e che è necessario progettare una UX nativo per ogni piattaforma. Figura 1 mostra esempi del genere di differenze UX dovrete considerare per costruire la migliore esperienza possibile.
Figura 1 confronto di Windows Phone 8 e funzionalità di Windows 8 UX
Windows Phone 8 | Windows 8 |
Con una mano tocco più comune | Una o due mani touch, mouse |
Hardware garantita, come fotocamera e accelerometro | Nessuna garanzia di alcun hardware specifico, deve controllare in fase di esecuzione |
Evitare le colonne multiple del contenuto | Righe e colonne di contenuto possono funzionare bene |
Scorrere verticalmente per più contenuti; camera limitato sulla barra app | Scorrere orizzontalmente per più contenuti; stanza significativo sulla barra app |
Pulsante Indietro hardware | Tasto sullo schermo posteriore |
Senza zoom semantico | Zoom semantico |
Spazi dei nomi XAML sebbene sia Windows 8 e Windows Phone 8 utilizzare XAML per la progettazione dell'interfaccia utente, non aspettatevi di riutilizzare XAML tra le tue applicazioni. Esistono notevoli differenze nelle piattaforme — pagina layout e orientamento, spazi dei nomi XAML e controlli XAML — che fanno di questo impegnativo.
Anche se esistono molti controlli per entrambe le piattaforme, risiedono in diversi spazi dei nomi. Per esempio, Windows 8 controlli equivalenti per Windows Phone si trovano in Windows.UIXaml.Controls, come pure in Microsoft.Phone.Controls e Microsoft.Phone.Shell, mentre System.Windows.Controls contiene alcuni controlli condivisi e controlli di Windows 8. Per fortuna, l'editor XAML vi avviserà quando si tenta di aggiungere un controllo non supportato. Tuttavia, XAML non supporta la compilazione condizionale, quindi non non c'è nessun modo semplice per includere gli spazi dei nomi per una piattaforma o l'altro in fase di esecuzione.
Controlli XAML ogni libreria di controlli è ottimizzato per la piattaforma corrispondente. Di conseguenza, è altamente raccomandato che si progetta i tuo controlli utente separatamente per ogni piattaforma. Questo aiuterà a mantenere una coerente UX su ogni piattaforma, riducendo la probabilità di bug dal porting di XAML. Figura 2 illustrato alcuni controlli di base.
Figura 2 base Windows Phone 8 e Windows 8 controlli
Windows Phone 8 | Windows 8 |
Controllo PhoneApplicationPage è l'elemento di pagina principale | Pagina di controllo è l'elemento di pagina principale |
Utilizzare il controllo LongListSelector per mostrare contenuti a scorrimento verticale | Utilizzare il controllo GridView per mostrare contenuti a scorrimento verticale |
Utilizzare il controllo Pivot per il contenuto di paginazione in orizzontale | Utilizzare il controllo SemanticZoom per molti elementi di raggruppamento in segmenti raggruppati (è anche possibile utilizzare il controllo della pagina di elementi raggruppati) |
Utilizzare il controllo ApplicationBar | Utilizzare il controllo AppBar |
I modelli di Windows 8 Visual Studio creano un LayoutAwarePage, che è una sottoclasse della pagina nell'API crudo, che fornisce le seguenti funzionalità aggiuntive e garantire la coerenza del design e UX:
- Stato di visualizzazione di applicazioni di mappatura dello stato di visualizzazione
- Gestori eventi GoBack e GoForward GoHome
- Mouse e scorciatoie da tastiera per la navigazione
- Gestione dello stato per la navigazione e il processo di gestione della durata
- Un modello di visualizzazione predefinita
Modello di dati e codice di supporto
Dispongono di tutte le applicazioni per la gestione dei dati e modelli di dati forniscono il modo migliore per farlo. Aiutano a garantire maggiore gestibilità, modularità, organizzazione del progetto e portabilità, e le API che li supportano sono buoni candidati per il riutilizzo del codice. Ancora, si non dovrebbe sacrificare architettura dell'applicazione o gestibilità per il riutilizzo del codice. Shared libraries, code-sharing tecniche e modelli come Model-View-ViewModel (MVVM) probabilmente vi servirà meglio. Per ulteriori informazioni su questi, vedere l'articolo di Doug Holland giugno questione, "Code-Sharing strategie per Windows Store e Windows Phone Apps" (msdn.microsoft.com/magazine/dn201744).
Caratteristiche specifiche della piattaforma
Ci sono molte caratteristiche che si comportano allo stesso modo in Windows 8 e Windows Phone 8, ma sono implementati in modo diverso. Per questo motivo, si dovrebbe evitare il riutilizzo del codice attraverso le piattaforme per determinati processi e funzioni, tra cui:
- Application Lifecycle
- Contratti e attività del sistema
- Affianca
- Notifiche toast
- Archiviazione locale
- Reti
- Elaborazione in background
- Fotocamera
- App Bar
Application Lifecycle anche se ci sono forti parallelismi tra l'applicazione del ciclo di vita su Windows Phone 8 e su Windows 8, le due piattaforme sono diverse API. Come si può vedere Figura 3, il flusso tra Stati e Stati di programma ad alto livello sono simili su entrambe le piattaforme, ma le risorse su Windows Phone 8 sono molto più vincolate, quale è il motivo per cui la maggior parte delle differenze nel ciclo di vita. Su entrambe le piattaforme, solo le app in primo piano può consumare le risorse di CPU (ad eccezione di attività in background, che sono gestite dal sistema operativo).
Figura 3 Windows Phone 8 e Windows 8 cicli di vita
Figura 4 Mostra le differenze nel comportamento del ciclo di vita tra le due piattaforme.
Figura 4 differenze in Windows Phone 8 e Windows 8 cicli di vita
Windows Phone 8 | Windows 8 |
Windows Phone 8 apps sono sempre lanciato o rilanciato. | Windows Store apps sono riprese senza pagina di navigazione. |
Windows Phone 8 maggio lapide apps. | Windows 8 sospende o termina completamente apps. Windows Store apps può supportare Vista ha ospitato l'attivazione, in cui l'applicazione esegue una singola attività all'interno di un'interfaccia utente fornita dal sistema. |
Windows Phone 8 supporta Fast Resume di applicazione. | Windows 8 non ha bisogno per la funzione di veloce applicazione ripristino perché apps sono tenuti in uno stato di sospensione più a lungo possibile; in caso contrario, che sono terminati. |
Figura 5 Mostra gli spazi dei nomi cui si trovano gli eventi del ciclo di vita dell'applicazione.
Figura 5 applicazione del ciclo di vita degli spazi dei nomi
Windows Phone 8 | Windows 8 |
Derivano da: System.Windows.Application | Derivano da: Windows.UI.Xaml.Application |
Application_Launching | |
Application_Activated | OnLaunched |
Application_Deactivated | OnSuspending |
Application_Closing |
Ci sono diversi punti di ingresso di app su ogni piattaforma, come Figura 6 illustrato.
Punti di ingresso di figura 6 App
Windows Phone 8 | Windows 8 | Entrambe le dimensioni |
Lancio di discorso | Ricerca | Tegola di App |
App Connect | Condivisione | Piastrelle secondari |
Brindisi | ||
Associazione protocollo e file |
Le attività di sistema e contratti sia Windows 8 e Windows Phone 8 hanno il supporto incorporato per le operazioni più comuni che coinvolgono il coordinamento con il sistema operativo. Windows 8 gestisce questi mediante contratti, mentre Windows Phone 8 utilizza le attività (ad esempio lanciatori e Choosers). Contratti e attività forniscono funzionalità simili all'utente, ma lo sviluppo è diverso. La funzionalità di che ognuno di essi espone non necessariamente mappa uno a uno, quindi è necessario considerare attentamente le mansioni e contratti quando il porting di un'applicazione.
Attività di Windows Phone 8 che API si trovano nello spazio dei nomi Microsoft.Phone.Tasks: PhotoChooserTask, EmailAddressChooseTask, SaveContractTask e così via. Al contrario, Windows 8 contratti hanno singole API correlate a riquadri aperti da charms (riquadro di ricerca, nel riquadro condivisione e simili); il supporto dei contratti è dichiarato nel manifesto dell'applicazione. I contratti sono essenzialmente accordi e loro implementazione comporta l'override dei metodi nella classe dell'applicazione o gestione di eventi dalle classi nell'API di Windows.
Piastrelle piastrelle sono punti di ingresso per apps Store di Windows e Windows Phone 8. Piastrelle primarie semplicemente lanciare applicazioni, mentre piastrelle secondari possono essere bloccati alla schermata iniziale; sono effettivamente un "deep link" che può prendere l'utente a una pagina specifica in app. Entrambe le piattaforme di supporto live tiles, in cui contenuto viene aggiornato periodicamente, ma le API sono completamente differenti. Figura 7 descrive 8 Windows Phone e Windows 8 piastrelle.
Figura 7 confronto di Windows Phone 8 e Windows 8 piastrelle
Windows Phone 8 piastrelle | Windows 8 piastrelle |
Tre dimensioni: piccolo, medio, largo | Due dimensioni: più piccolo, più grande |
Standard piastrelle, piastrelle flip, ciclici tegole e coppi iconiche (Microsoft.Phone.Shell) | SecondaryTile può essere personalizzata utilizzando modelli XML (Windows.UI.StartScreen) |
Fornire immagini tile nel manifesto | Fornire immagini tile nel manifesto |
Creare piastrelle secondari utilizzando il metodo statico ShellTile.Create | Creare piastrelle secondari utilizzando il SecondaryTile.RequestCreateAsync Metodo |
Tegola di app aggiornamento usando ShellTile.Update (Microsoft.Phone.Shell); invio di notifiche tramite ShellTileSchedule (ShellTileToast aggiorna anche piastrelle) | Aggiornamento delle mattonelle app utilizzando TileUpdateManager e TileNotification (Windows.UI.Notifications) |
Utente può sbloccare la piastrella app | Utente può spegnere il live tile |
Figura 8A e Figura 8B Visualizza un confronto codice di creazione tile secondaria. Su Windows Phone 8, la classe ShellTile fornisce un interfaccia statica per piastrelle secondari creando (e rimozione). È possibile fornire questo utilizzando una delle diverse classi che incapsulano i dati di una piastrella: StandardTile, CycleTileData, FlipTileData o IconicTileData. Windows 8 ha solo una data struttura per definire una tegola secondaria (SecondaryTile). Tegola creazione avviene con una richiesta asincrona, che chiede all'utente se gli sarebbe piaciuto al pin della piastrella alla schermata iniziale.
Figura 8A tegola creazione in Windows Phone 8
CycleTileData tileData = new CycleTileData()
{
Title = item.Title,
SmallBackgroundImage = new Uri(item.GetImageUri(),
UriKind.RelativeOrAbsolute),
CycleImages = list
};
ShellTile.Create(new Uri(navDataSource,
UriKind.Relative), tileData, true);
Figura 8B tegola creazione in Windows 8
var tile = new SecondaryTile(
item.UniqueId, // Tile ID
item.ShortTitle, // Tile short name
item.Title, // Tile display name
item.UniqueId, // Activation argument
TileOptions.ShowNameOnLogo, // Tile options
uri // Tile logo URI
);
await tile.RequestCreateAsync();
Tostare le notifiche notifiche toast Windows 8 sono simili agli allarmi e promemoria Windows Phone 8. Hanno lasciato un'app informa l'utente di un evento in un dato momento. Facendo clic su una notifica toast lancia l'app se è chiuso e riprende l'app se è stata sospesa.
Windows Phone 8 supporta due tipi di notifiche: sveglia e promemoria. Possono anche visualizzare i Brindisi (anche da sfondo) utilizzando ShellToast. Allarmi e promemoria si trovano in Micromorbido.Phone.Scheduler, mentre ShellToast è in Microsoft.Phone.Shell.
Windows 8 utilizza le notifiche toast via ToastNotificationManager e ScheduledToastNotification, che si trovano nello spazio dei nomi Windows.UI.Notifications e sono attivati tramite il manifesto dell'applicazione.
Archiviazione locale il Windows.Storage dello spazio dei nomi fornisce un nuovo set di API condivise che permettono applicazioni di gestire file locali. Su Windows Phone 8, System.IO.IsolatedStorage.IsolatedStorageFile fornisce compatibilità con le versioni precedenti di Windows Phone, ma dovrebbe spostare verso usando le nuove API. È possibile utilizzare la serializzazione e Windows.Storage.ApplicationData.Current.LocalFolder per rendere persistenti i dati di app di archiviazione locali app.
Entrambe le piattaforme di supporto archiviazione di coppie chiave/valore (impostazioni) e i file e le cartelle. Tuttavia, le API di Windows Phone 8 sono un sottoinsieme delle API complete e non forniscono il supporto per il roaming dati archivio, l'archivio dati temporanei, impostazioni locali o le impostazioni di roaming. Figura 9 è un riepilogo delle opzioni di archiviazione per ogni piattaforma.
Figura 9 opzioni di archiviazione in Windows Phone 8 e Windows 8
Caratteristica e Namespace | Funzione | Windows Phone 8 | Windows 8 |
Windows.Storage | Archiviazione file app locali | Yes | Yes |
System.IO.IsolatedStorage.IsolatedStorageFile | Archiviazione file app locali | Yes | No |
Impostazioni ApplicationData (LocalFolder) | Memorizzazione di chiave/valore | No | Yes |
System.IO.IsolatedStorage.IsolatedStorageSettings | Memorizzazione di chiave/valore | Yes | No |
SQL CE | Database | Yes | No |
Rete maggior parte delle applicazioni si basano pesantemente sulle capacità dei dispositivi risiedono sul corretto funzionamento di Internet. Sia per Windows 8 e Windows Phone 8, questa capacità è dichiarata nel manifesto. Figura 10 Mostra il networking pertinente le API.
Figura 10 differenze di API di rete in Windows Phone 8 e Windows 8
Windows Phone 8 | Windows 8 | Entrambe le dimensioni |
ConnectionManager
|
NetworkInterface
|
HttpWebRequest, HttpWebResponse
|
DatagramSocket, StreamSocket
|
Presa (TCP o UDP), StreamSocket
|
|
HttpClient
|
WebClient
|
Windows 8 introduce HttpClient, che agisce come sessione di inviare le richieste a un server (HTTP, GET, POST e PUT). Ogni istanza di HttpClient dispone di un proprio pool di connessioni per evitare interferenze da altri. Dati viene restituiti come una stringa, HttpRequestMessage, flusso o matrice di byte.
WebClient, d'altra parte, non è disponibile in Windows 8 (tranne che per applicazioni desktop). È usato in applicazioni Windows Phone 8 e relativa implementazione è leggermente diverso da WebClient nelle versioni precedenti di Windows. In Windows Phone 8, è inoltre possibile utilizzare la classe HttpWebRequest/HttpWebResponse con un wrapper di async. Un'anteprima di rilascio di un portatile HttpClient è ora disponibile per entrambe le piattaforme. È possibile ottenere questa anteprima dalla Galleria NuGet.
Elaborazione di sfondo In alcune situazioni si potrebbe desiderare di eseguire codice in background: Lo streaming di musica, ping di un server per gli aggiornamenti, download di un file e così via. Entrambe le piattaforme possono dare il sistema operativo un compito da eseguire quando si verifica qualche trigger. Queste attività sono indipendenti dal app e il sistema operativo ha il controllo completo su di loro.
Ci può essere solo un agente di sfondo per ogni applicazione, ma che l'agente può eseguire una o entrambe queste attività:
- Attività periodiche: attività brevi che il sistema operativo potrebbe eseguire ogni 30 minuti.
- Attività di risorse: più operazioni eseguite quando il telefono è collegato o dispone di un'ampia autonomia.
Figura 11 illustrato che cosa avete bisogno per realizzare attività in background su entrambe le piattaforme. Si noti che Windows Store apps che utilizzano attività in background si deve dichiarare nel manifesto dell'applicazione.
Figura 11 mediante Background task in Windows Phone 8 vs. Windows 8
Windows Phone 8 | Windows 8 |
Derivare da BackgroundAgent o una delle relative sottoclassi:
|
Windows.ApplicationModel.Background |
Eseguire l'override del metodo OnInvoke e chiamare NotifyComplete quando finito | Implementare l'interfaccia IBackgroundTask e il suo metodo Run |
Verificare che l'operazione non è già registrato | Dichiarare attività in background nel manifesto. verificare che l'operazione non è già registrato |
Utilizzare ScheduledActionService per aggiungere e rimuovere gli agenti sfondo | Utilizzare BackgroundTaskBuilder per creare e registrare un'istanza della tua attività |
Gestire il BackgroundTaskevento Completed per ottenere i dati indietro dall'attività |
Ora illustrerò come implementare un'attività in background, prima in Windows 8 e poi in Windows Phone 8.
Ecco i passaggi ad alto livello per Windows 8:
- Implementare l'interfaccia IBackgroundTask ed eseguire il metodo.
- Dichiarare sfondo attività uso nel manifesto
- Verificare che l'operazione non è già registrato
- Utilizzare BackgroundTaskBuilder per creare e registrare un'istanza dell'attività
- Gestire l'evento BackgroundTaskCompleted per ottenere dati dal compito:
using Windows.ApplicationModel.Background;
namespace MyTaskExample
{
public class SimpleBackgroundTask : IBackgroundTask
{
public void Run(IBackGroundTaskInstance task)
{
// Do stuff ...
}
}
}
- Dichiarare che l'applicazione utilizza un'attività in background:
<Extensions>
<Extension Category="windows.backgroundTasks"
EntryPoint="Tasks.MyTask">
<BackgroundTasks>
<Task Type="systemEvent" />
</BackgroundTasks>
</Extension>
</Extensions>
- E controllare la registrazione:
foreach (var task in Background.BackgroundTaskRegistration.AllTasks)
{
// Use if (task.Value.Name == taskName) to see if
// the task has already been registered
}
// If not ...
var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskName;
taskBuilder.TaskEntryPoint = "Tasks.MyTask";
taskBuilder.SetTrigger(
new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
BackgroundTaskRegistration myTaskRegistration =
taskBuilder.Register();
Ecco i passaggi ad alto livello per Windows Phone 8:
- Creare ScheduledTaskAgent (modello Windows Phone programmato Task Agent):
public class ScheduledAgent : ScheduledTaskAgent
{
protected override void OnInvoke(ScheduledTask task)
{
// Write code here to perform task ...
NotifyComplete();
}
}
- Verificare che tale attività è stata pianificata già a correre e se non, crearne uno nuovo; in caso contrario, rimuovere le attività esistenti (l'operazione pianificata da eseguire periodicamente per 10 giorni):
PeriodicTask task =
ScheduledActionService.Find(taskName) as PeriodicTask;
bool found = (task != null);
if (!found)
task = new PeriodicTask(taskName);
else
ScheduledActionService.Remove(taskName);
task.Description = description;
task.ExpirationTime = DateTime.Now.AddDays(10);
ScheduledActionService.Add(task);
A differenza con Windows 8, non c'è nessuna necessità di dichiarare il supporto per operazioni in background nel manifesto.
Fotocamera sia Windows Phone 8 e Windows 8 supporta la cattura immagini e video ma, come con altre caratteristiche, le API sono differenti.
Acquisizione di foto su Windows Phone 8 è un'attività gestita dal sistema operativo. È possibile registrare un callback per gestire il risultato quando l'utente esce dalla fotocamera dell'interfaccia utente. Può o può non avere come risultato una foto, in modo da controllare prima di utilizzare il risultato. Registrazione video non è incorporato per l'attività di cattura-fotocamera, quindi richiede più lavoro.
Unica per Windows Phone 8 è la possibilità di creare un app fotocamera chiamato lente. È inoltre possibile creare lenti, contenuti multimediali, che offrono un'esperienza unica per la visualizzazione o la modifica delle foto. Inoltre, la fotocamera può essere utilizzata come un gateway per altre esperienze. Per esempio, lettore barcode applicazioni utilizzano la fotocamera per scansionare un codice a barre e quindi visualizzare i dati associati. Tutte queste applicazioni lente sono possibili utilizzando l'estensibilità della lente, che permette di lanciare direttamente dal selettore lente in un'esperienza di mirino. È inoltre possibile utilizzare speciali API per accedere a livello di codice il sensore della fotocamera. Per ulteriori informazioni, vedere "lente estensibilità per Windows Phone 8" (aka.ms/Vdgk8e) e "Acquisizione di foto per Windows Phone" (aka.ms/Owcwpl) nel Windows Phone Dev Center.
Windows 8 utilizza il CameraCaptureUI (Windows.Media.Capture) per foto e video. Questo richiede l'abilitazione di Webcam e microfono nel manifesto:
private async void OnCapturePhoto(object sender,
TappedRoutedEventArgs e)
{
var camera = new CameraCaptureUI();
var file =
await camera.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (file != null)
{
// Do something with the result ...
}
}
Windows Phone 8 USA CameraCaptureTask (Microsoft.Phone.Tasks) per scattare foto. Questo richiede l'abilitazione di ID_CAP_ISV_CAMERA e ID_CAP_MICROPHONE nel manifesto, come mostrato Figura 12.
Figura 12 abilitazione ID_CAP_ISV_CAMERA e ID_CAP_MICROPHONE nel Windows Phone 8 manifesto
private readonly CameraCaptureTask cameraTask;
public Init() {
cameraTask = new CameraCaptureTask();
cameraTask.Completed += PhotoCaptured;
}
public void TakePhoto() {
cameraTask.Show();
}
private async void PhotoCaptured (object sender,
PhotoResult result) {
await Task.Run(() => {
// Do something with the result...
});
}
App Bar Windows 8 app bar sono molto più potenti di barre app Windows Phone 8. Comunemente utilizzato azioni — come aggiunta, modifica ed eliminazione di elementi — può essere collocato su una barra di app. Un'app può essere notificato quando l'utente apre o chiude un bar app gestendo gli eventi chiusi e aperto.
Ci sono differenze significative in quanto la barra app funziona per ogni piattaforma, come mostrato Figura 13.
Figura 13 le differenze in come il Bar App funziona in Windows Phone 8 e Windows 8
Windows Phone 8 | Windows 8 |
Bar uno app nella parte inferiore della pagina | Due barre di app: uno in basso e uno in cima |
Solo quattro elementi ammessi
|
Si comporta come qualsiasi contenitore
|
ApplicationBar controllo interno PhoneApplicationPage.ApplicationBar | AppBar controllo all'interno di Page.BottomAppBar o Page.TopAppBar |
Impostare la modalità di Default per mostrare l'app bar quando la pagina viene caricata | Impostare IsOpen su true per visualizzare l'app bar quando la pagina viene caricata |
Impostare IsMenuEnabled per attivare il menu | Impostare IsSticky a true per forza una barra app per rimanere sempre aperto |
La dichiarazione di barra app in Windows 8 è mostrata Figura 14. Si noti che due stack pannelli sono utilizzati per raggruppare i pulsanti, con un gruppo sulla sinistra e l'altro sulla destra.
Figura 14 la barra App dichiarazione in Windows 8
<Page.BottomAppBar IsOpen="True">
<AppBar x:Name="bottomAppBar" Opened="AppBar_Opened"
Padding="10,0,10,0">
<Grid>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Left">
<Button Style="{StaticResource TakePictureAppBarButtonStyle}"
Click="TakePicture_Click"/>
<Button Style="{StaticResource ShareTaskAppBarButtonStyle}"
Click="ShareImage_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right">
<Button Style="{StaticResource StartCoookingAppBarButtonStyle}"
Click="StartCooking_Click"/>
<Button Style="{StaticResource PinToStartAppBarButtonStyle}"
Click="PinToStart_Click"/>
</StackPanel>
</Grid>
</AppBar>
</Page.BottomAppBar>
Figura 15 viene illustrata la dichiarazione di barra app Windows Phone 8 (si noti che solo quattro elementi ApplicationBarIconButton sono consentiti al telefono ApplicationBar, e non contenitori sono collocati all'interno dell'elemento ApplicationBar).
Figura 15 la barra App dichiarazione in Windows Phone 8
<phone:PhoneApplicationPage.ApplicationBar x:name="ddd">
<shell:ApplicationBar x:Name="bottomAppBar" IsVisible="True"
IsMenuEnabled="True" Mode="Default" Opacity="1.0">
<shell:ApplicationBarIconButton x:Name="btnTakePicture"
IconUri="/Assets/Icons/camera.png"
Click="btnTakePicture_Click"
Text="Take Picture"/>
<shell:ApplicationBarIconButton x:Name="btnShareTask"
IconUri="/Assets/Icons/share.png"
Click="btnShareShareTask_Click"
Text="Share Image"/>
<shell:ApplicationBarIconButton x:Name="btnStartCooking"
IconUri="/Assets/Icons/alarm.png"
Click="btnStartCooking_Click"
Text="Start Cooking"/>
<shell:ApplicationBarIconButton x:Name="btnPinToStart"
IconUri="/Assets/Icons/like.png"
Click="btnPinToStart_Click"
Text="Pin To Start"/>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
Conclusioni
Sempre più spesso, i consumatori si aspettano continuità di esperienza tra loro smartphone e altri dispositivi. Il nucleo comune di Windows 8 e Windows Phone 8 consente un ragionevole livello di riutilizzo durante la creazione di soluzioni per entrambe le piattaforme. Tuttavia, come si è visto in questo articolo, è importante riconoscere le principali differenze in dispositivi fisici e il modo in cui gli utenti interagiscono con loro, come pure le differenze nelle API per ciascuno. Queste differenze significano designer applicazione deve tenere conto per la costruzione di un'interfaccia utente separata e UX, che a sua volta significa poco o nessun riutilizzo del codice XAML attraverso le piattaforme. Anche se alcune API sono disponibili per entrambe le piattaforme, come con Windows.Store.StorageFile, molte caratteristiche sono esternamente simili ma implementato diversamente. Questo è il caso per gli eventi del ciclo di vita, piastrelle, cattura media, attività e contratti, impostazioni, attività in background e la barra app.
Una volta si cogliere queste differenze, puoi tranquillamente sfruttare tecniche di riutilizzo del codice cross-platform come portatile librerie di classi, componenti di runtime e così via. Per ulteriori informazioni su queste tecniche, fare riferimento all'articolo di code-sharing di Doug Holland ho accennato all'inizio, come pure per quanto riguarda l'articolo Windows Phone Dev Center a aka.ms/sharecode. E ti consigliamo di scaricare la presentazione di codice campione condivisione in azione da aka.ms/gxcvq3.
Joel Reyes è un evangelista di tecnologia nel settore pubblico DPE incentrato su Windows Phone 8 e Windows 8. È possibile contattarlo al joel.reyes@microsoft.com.
Grazie ai seguenti esperti tecnici per la revisione di questo articolo: Andrew Byrne (Microsoft) e Matthias Shapiro (Microsoft)