Un ottimo modo per migliorare la tua applicazione è fornire un widget dell'app che lo accompagni. I widget delle app sono semplici controlli che possono essere posizionati in luoghi come la schermata Home, informando l'utente di importanti aggiornamenti all'interno dell'applicazione. I widget delle app ricordano all'utente che la tua app esiste e li incoraggiano a utilizzare l'applicazione più spesso, tra gli altri vantaggi. In questo tutorial, impara a creare un semplice widget di app per migliorare l'esperienza dell'utente nell'applicazione Tutlist di Tutlist.
I widget delle app sono disponibili dal livello API 3 (Android 1.5). Nel tempo, sono state aggiunte funzionalità al framework widget dell'app, ma per questo tutorial ci atteniamo alle nozioni di base. Ai fini di questo tutorial, vogliamo progettare un semplice widget dell'app che ricordi all'utente che sono disponibili nuovi tutorial da leggere. Pertanto, creeremo un widget che mostra alcune informazioni sull'ultimo tutorial. L'utente può fare clic sul widget dell'app nella schermata iniziale e lanciarlo direttamente nell'applicazione.
L'applicazione TutList è un progetto di tutorial lettore in corso. Questo tutorial crea le serie continue sulla nostra applicazione TutList con il tutorial più recente, Android Essentials: ListView Item State Management: un flag "Leggi elemento". Tuttavia, l'argomento trattato, creando un App Widget, potrebbe essere applicato ad altre app di tua scelta, con alcune modifiche. Se hai problemi a tenere il passo, sentiti libero di postare domande nella sezione commenti - molte persone leggono e rispondono, incluso noi stessi. Inoltre, non dimenticare il riferimento all'SDK Android e, più specificamente, la documentazione del framework App Widgets.
Il codice di esempio finale che accompagna questo tutorial è disponibile per la navigazione e il download come open-source dall'hosting del codice Google.
Questo elenco di codici per il tutorial presuppone che inizierai a codificare il tutorial precedente della serie, Android Essentials: ListView Item State Management: un flag "Leggi elemento", lasciato fuori. Puoi scaricare quel codice e lavorare da lì oppure puoi scaricare il codice per questo tutorial e seguirlo. Se lavori con il codice precedente, tieni presente che occasionalmente apportiamo modifiche al di fuori dell'ambito di qualsiasi tutorial. Il tuo risultato finale potrebbe non apparire o comportarsi esattamente allo stesso modo. In ogni caso, tuttavia, tieniti pronto scaricando uno o l'altro progetto e importandolo in Eclipse se non lo hai già fatto.
La prima cosa che dobbiamo fare è configurare un file di definizione del widget dell'app per il widget dell'app. I file di definizione del widget dell'app sono file XML speciali che possono essere memorizzati nella directory del progetto / res / xml e sono referenziati dal file manifest Android dell'applicazione.
Aggiungi un file chiamato /res/xml/tutlist_appwidget.xml al tuo progetto.
Questo file di configurazione del widget dell'app è piuttosto semplice. Definisce un widget dell'app (un fornitore), imposta la sua dimensione (3x1 celle), con quale frequenza si aggiorna (i nuovi articoli vengono rilasciati ogni giorno, quindi un intervallo di 24 ore è ragionevole) e specifica la risorsa di layout che definisce il contenuto di il widget dell'app.
Nota: i widget delle app devono essere progettati in dimensioni particolari. Per ulteriori informazioni sulla progettazione del widget dell'app, consultare la guida alle best practice sul sito Web degli sviluppatori Android.
Successivamente, dobbiamo creare il file /layout/titlist_appwidget_layout.xml appena indicato nel file di configurazione e dare alcuni controlli al nostro widget dell'app. I widget delle app non vengono eseguiti all'interno del processo dell'applicazione, ma vengono eseguiti in remoto. Pertanto, i widget delle applicazioni utilizzano la classe RemoteViews come base per l'interfaccia utente in modo che i controlli possano essere visualizzati in un altro processo. La classe RemoteViews supporta solo un sottoinsieme di tutti i controlli di visualizzazione che è possibile utilizzare per utilizzare le normali applicazioni, sebbene in futuro possano essere aggiunti ulteriori controlli. Sono supportati controlli di layout come FrameLayout, LinearLayout e RelativeLayout. Controlli come Button, ImageView e TextView sono supportati.
Il nostro semplice widget dell'app includerà testo e un'immagine, quindi siamo a posto. Non c'è niente di speciale in questo file di layout. È semplicemente un RelativeLayout con un controllo ImageView per il logo e due controlli TextView per il titolo del tutorial e l'estratto.
Ora dobbiamo aggiungere una classe alla nostra applicazione per controllare il comportamento del widget dell'app. Questa classe deve estendere la classe AppWidgetProvider. Il callback principale di interesse è il metodo onUpdate (). Questo metodo deve estrarre l'ultimo titolo del tutorial dal database dell'applicazione e aggiornare TextView nell'oggetto RemoteViews.
public class TutWidgetProvider estende AppWidgetProvider String statico pubblico finale DEBUG_TAG = "TutWidgetProvider"; @Override public void onUpdate (Contesto di contesto, appWidgetManager di appWidgetManager, int [] appWidgetIds) try updateWidgetContent (context, appWidgetManager); catch (Exception e) Log.e (DEBUG_TAG, "Failed", e); public static void updateWidgetContent (Contesto contesto, appWidgetManager appWidgetManager) String strLatestTitle = context.getString (R.string.appwidget_no_latest); String [] projection = TutListDatabase.COL_TITLE; Uri content = TutListProvider.CONTENT_URI; Cursore cursor = context.getContentResolver (). Query (contenuto, proiezione, null, null, TutListDatabase.COL_DATE + "desc LIMIT 1"); if (cursor.moveToFirst ()) strLatestTitle = cursor.getString (0); cursor.close (); RemoteViews remoteView = new RemoteViews (context.getPackageName (), R.layout.tutlist_appwidget_layout); remoteView.setTextViewText (R.id.title, strLatestTitle); Inten launchAppIntent = new Intent (context, TutListActivity.class); PendingIntent launchAppPendingIntent = PendingIntent.getActivity (contesto, 0, launchAppIntent, PendingIntent.FLAG_UPDATE_CURRENT); remoteView.setOnClickPendingIntent (R.id.full_widget, launchAppPendingIntent); ComponentName tutListWidget = new ComponentName (context, TutWidgetProvider.class); appWidgetManager.updateAppWidget (tutListWidget, remoteView);
Il codice per aggiornare il widget dell'app è piuttosto semplice. Per prima cosa interrogiamo il database dell'applicazione per l'ultimo titolo. Quindi carichiamo un oggetto RemoteViews dal layout del nostro widget, impostiamo il contenuto del controllo TextView sui dati del titolo più recenti. Impostiamo il gestore onClick per l'intero widget (il RelativeLayout) in modo tale che facendo clic su di esso si avvia l'app TutList. Infine, utilizziamo il metodo updateAppWidget () per confermare le modifiche al widget dell'app.
Nel caso dell'applicazione TutList, vogliamo anche essere in grado di forzare un aggiornamento dei contenuti del widget ogni volta che scarichiamo nuovi contenuti dal server (nel caso in cui l'app non sia aggiornata). Pertanto, estraiamo la maggior parte del codice di aggiornamento del widget e lo trasformiamo in un metodo statico pubblico che può essere richiamato da TutListDownloaderService, se necessario. Troverai una semplice chiamata per farlo nel metodo onPostExecute () della classe DownloaderTask all'interno di TutListDownloaderService.
TutWidgetProvider.updateWidgetContent (context, AppWidgetManager.getInstance (context));
Infine, è necessario registrare il widget dell'app nel file Manifest dell'applicazione. Per fare questo, userai il tag. Questo blocco di XML deve essere inserito all'interno del tag allo stesso livello dei tag.
Si noti che il nome del destinatario è il nome dell'implementazione della classe del fornitore del widget dell'app. Aggiungi un filtro intent per l'evento APPWIDGET_UPDATE in modo che il tuo widget si aggiorni a intervalli regolari. Infine, si specifica il file di configurazione XML in cui sono state configurate le impostazioni del widget dell'app.
Se esegui la tua app, ora avrai un widget dell'app! Dalla schermata Home, tieni premuta un'area aperta in modo che venga visualizzato il menu, quindi scegli Widget, TutList. Il widget dell'app verrà quindi aggiunto alla schermata Home, come mostrato nella figura seguente.
L'ultimo SDK di Android, Honeycomb (livello API 12), ha introdotto una serie di interessanti nuove funzionalità del widget dell'app.
Molti dei widget dell'interfaccia utente sono stati ridisegnati per Android 3.0. Ciò ha permesso a più tipi di controlli di essere compatibili con Remote Views, e quindi in grado di vivere all'interno di widget di app. Gli sviluppatori ora possono includere elenchi, griglie e altri controlli più complessi nei loro widget di app. Un'altra caratteristica interessante introdotta in Android 3.1 è la possibilità per gli utenti di ridimensionare i widget delle app sia orizzontalmente che verticalmente, invece di affidarsi a controlli di dimensioni fisse. Questa è una funzione potente, ma gli sviluppatori devono aggiornare i loro widget per supportare questa funzione.
In questa esercitazione, hai aggiunto un semplice widget dell'app all'applicazione TutList esistente. Hai imparato a creare e configurare un semplice widget per app compatibile con tutti i dispositivi Android attualmente disponibili per i consumatori. Inoltre, ci sono un certo numero di interessanti nuove funzionalità che hanno recentemente aggiunto il framework dell'app dell'app Android SDK che vanno oltre lo scopo di questo tutorial, in quanto sono compatibili solo con i dispositivi Android più recenti.
Come sempre, non vediamo l'ora di ricevere il tuo feedback.
Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android, seconda edizione e Sams ti insegna a sviluppare applicazioni Android in 24 ore, seconda edizione. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.
я я