Creeu un giny per a la vostra aplicació

Autora: Lewis Jackson
Data De La Creació: 13 Ser Possible 2021
Data D’Actualització: 1 Juliol 2024
Anonim
Creeu un giny per a la vostra aplicació - Aplicacions
Creeu un giny per a la vostra aplicació - Aplicacions

Content


Des dels primers dies del sistema operatiu, els ginys per a Android han permès als usuaris interactuar amb les seves aplicacions preferides, des de la comoditat de la pantalla de casa. Com es pot crear un widget Android?

Per al desenvolupador, els ginys ofereixen a la vostra aplicació una presència valuosa a la pantalla inicial de l'usuari. En lloc de deixar-se fora de la vista al calaix de l'aplicació, es recordarà als usuaris la vostra aplicació cada vegada fan una ullada a la pantalla d'inici, alhora que obtenen una vista prèvia del contingut més interessant i útil de l'aplicació.

Els ginys donen a la vostra aplicació una valuosa presència a la pantalla d'inici de l'usuari

En aquest article, us mostraré com proporcionar una millor experiència a l’usuari alhora que animaré als usuaris a participar en l’aplicació mitjançant la creació d’un widget Android. Al final d’aquest article, haureu creat un giny de col·lecció desplaçable que mostri un conjunt de dades complet a la pantalla inicial de l’usuari.


Per assegurar-vos que esteu lliurant el tipus de widget que fan els usuaris voler per col·locar-los a la pantalla inicial, també crearem una Activitat de configuració, que permetrà als usuaris personalitzar el contingut, l’aspecte i les funcions del widget. Finalment, mostraré com podeu animar a la gent a utilitzar el vostre giny, creant una imatge de visualització prèvia del widget que mostra el millor que el vostre giny ofereix.

També llegiu: Desenvolupament per a dispositius plegables: el que heu de saber

Què són els ginys per a Android?

Un giny d’aplicació és una aplicació en miniatura lleugera i que es troba a la pantalla inicial de l’usuari.

Els ginys per a Android poden proporcionar un ventall de contingut, però en general figuren en una de les categories següents:


  • Giny d'informació. Es tracta d’un giny no desplaçable que mostra informació, com ara la previsió meteorològica d’avui o la data i hora.
  • Ginys de la col·lecció. Es tracta d’un widget desplaçable que mostra un conjunt de dades relacionades, formatades com a ListView, GridView, StackView o AdapterViewFlipper. Els ginys de col·lecció estan normalment recolzats en una font de dades, com una base de dades o un quadre.
  • Controlar widgets. Aquests widgets actuen com un control remot que permet als usuaris interactuar amb la vostra aplicació, sense haver de portar-lo al primer pla. Les aplicacions que reprodueixen suports, com podcasts o música, solen disposar de widgets de control que permeten a l'usuari activar accions de Reproducció, Pausa i Saltar directament des de la pantalla inicial.
  • Ginys híbrids. De vegades és possible que pugueu oferir una millor experiència de l’usuari combinant elements de diverses categories. Per exemple, si esteu desenvolupant un widget de control per a una aplicació de música, podeu proporcionar controls de reproducció, pausa i salt, però també podeu decidir mostrar informació, com ara el títol i l'artista de la cançó. Si decidiu barrejar i combinar, no us deixeu emportar. Els ginys solen oferir la millor experiència als usuaris quan proporcionen un accés fàcil a una petita quantitat d'informació oportuna, rellevant o a algunes funcions d'ús comú. Per ajudar a mantenir lleugers els vostres widgets híbrids, us recomanem que identifiqueu la categoria principal del vostre giny, que la desenvolupeu d’acord amb aquesta categoria i aleshores afegeix alguns elements de la categoria secundària del giny.

El meu projecte necessita realment un widget d'aplicacions?

Hi ha diverses raons per les quals haureu de plantejar afegir un giny d'aplicacions al vostre projecte Android.

Els ginys per a Android poden millorar l’experiència de l’usuari

Com a regla general, menys passos de navegació requereixen per completar una tasca, millor serà l'experiència de l'usuari.

Si proporcioneu un widget d'aplicació, podeu eliminar diversos passos de navegació dels fluxos d'ús més freqüent de l'aplicació. En el millor dels casos, els usuaris podran obtenir la informació que necessiten només fent una ullada a la pantalla de casa, o bé realitzen la tasca desitjada simplement tocant un botó al widget de control.

Més potent que les dreceres d’aplicació

Els widgets de l'aplicació sovint responen a esdeveniments onClick llançant el nivell més alt de l'aplicació associada, similar a una drecera d'aplicacions. No obstant això, els ginys també poden proporcionar accés directe a les activitats específiques d'una aplicació, per exemple, si toqueu la notificació nova rebuda d'un giny, podreu llançar l'aplicació associada amb la nova oberta.

En incrustar diversos enllaços a la disposició del vostre giny, podeu proporcionar un accés únic a totes les activitats més importants de la vostra aplicació, eliminant encara més passos de navegació dels fluxos més usats.

En incrustar diversos enllaços a la disposició del vostre giny, podeu proporcionar un accés únic a totes les activitats més importants de la vostra aplicació.

Tingueu en compte que els ginys només responen a esdeveniments onClick, la qual cosa impedeix que els usuaris interactuin accidentalment amb el seu giny mentre es desplacen per la pantalla de casa. L’única excepció és quan l’usuari intenta suprimir el widget arrossegant-lo cap a l’acció de eliminació de la pantalla de pantalla inicial, ja que en aquest escenari el widget respondrà a un gest vertical.

Aquesta interacció està gestionada pel sistema Android, de manera que no us haureu de preocupar d’implementar manualment el suport de lliscar vertical al vostre widget.

Creeu un giny d'Android per conduir la vostra tasca a llarg termini

El fet de convèncer la gent per descarregar la seva aplicació és només el primer pas per crear una aplicació Android exitosa. El més probable és que, si agafeu el vostre propi smartphone o tauleta Android i passeu pel calaix de l'aplicació, descobrireu diverses aplicacions que no heu utilitzat en dies, setmanes o, possiblement, fins i tot mesos!

Llegiu també:Per començar amb el SDK de Facebook per a Android

Una vegada que la vostra aplicació s’hagi instal·lat amb èxit al dispositiu de l’usuari, haureu d’esforçar-vos per mantenir-los compromesos i gaudir de la vostra aplicació. Fer una presentació a l'aplicació a la pantalla d'inici pot ser una eina potent per ajudar a impulsar compromisos a llarg termini, simplement perquè és un recordatori constant que la vostra aplicació existeix.

Un giny ben dissenyat també pot servir com a anunci permanent de la vostra aplicació. Cada cop que l’usuari mira la pantalla de casa, el widget té l’oportunitat d’animar-los activament a que es tornin a connectar amb l’aplicació, presentant-los tot el contingut més interessant i útil de l’aplicació.

Creació d’un giny d’aplicació de col·lecció

En aquest tutorial, anem a crear un giny de col·lecció que mostri una matriu com a Llista de desplaçament.

Per ajudar-vos a fer el seguiment del cicle de vida del widget de l’aplicació, aquest widget també activarà diverses torrades a mesura que es mou pels diferents estats del cicle de vida. Cap al final d’aquest tutorial, millorarem el nostre widget amb una imatge de previsualització personalitzada que es mostrarà al selector de widgets d’Android i una activitat de configuració, que permetrà als usuaris personalitzar el giny abans de col·locar-lo a la pantalla de casa.

Creeu un nou projecte per a Android amb la configuració que escolliu i comencem-ho!

Construeix la disposició del teu giny

Per començar, definim la interfície d’usuari del Giny (UI).

Els widgets de l'aplicació es mostren en un procés fora la vostra aplicació, de manera que només podeu utilitzar dissenys i visualitzacions compatibles amb RemoteViews.

Quan creeu el disseny, esteu restringit a les opcions següents:

  • AnalogClock
  • Botó
  • Cronòmetre
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • LinearLayout
  • ProgressBar
  • RelativeLayout
  • TextView
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • LlistaVista
  • StackView
  • ViewFlipper

Tingueu en compte que les subclasses de les classes i visualitzacions anteriors són no suportat

Creeu un fitxer de recurs de disseny nou anomenat list_widget.xml. Com que mostrem les nostres dades mitjançant un ListView, aquesta disposició serveix principalment com a contenidor per a una element:

Desplegar el giny de la col·lecció

A continuació, hem de crear un proveïdor de dades per al nostre ListView. Creeu una classe de Java nova anomenada DataProvider.java i afegiu-hi el següent:

importa android.content.Context; importa android.content.Intent; importa android.widget.RemoteViews; importa android.widget.RemoteViewsService; importar java.util.ArrayList; importa java.util.List; importa estàtic android.R.id.text1; importa android.R.layout.simple_list_item_1 estàtic; public class DataProvider implementa RemoteViewsService.RemoteViewsFactory {List myListView = new ArrayList <> (); Context mContext = null; Public DataProvider (Context context, Intent intent) {mContext = context; } @Overt the public void onCreate () {initData (); } @Overt the public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Overtir RemoteViews públics getViewAt (posició int) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (posició)); vista de retorn; } @Override public RemoteViews getLoadingView () {return null; } @Overt the public int getViewTypeCount () {retorn 1; } @Override public long longItItId (posició int) {posició de retorn; } @Substitueix public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add ("Element de la llista de visualització" + i); }}}

AppWidgetProvider: configuració del vostre widget

Per crear un widget d'Android, heu de crear diversos fitxers.

El nostre primer fitxer específic per a widgets és un AppWidgetProvider, que és un BroadcastReceiver on definireu els diversos mètodes de cicle de vida del widget, com el mètode anomenat quan es va crear el primer giny i el mètode que es truca quan es elimina aquest widget.

Creeu una classe de Java nova (Fitxer> Nou> Classe Java) anomenada CollectionWidget.

Per començar, tots els fitxers proveïdors de widgets s’han d’estendre des de la classe AppWidgetProvider. Aleshores, hem de carregar el fitxer de recurs de disseny list_widget.xml en un objecte RemoteViews i informar a AppWidgetManager sobre l'objecte actualitzat de RemoteViews:

public class CollectionWidget estén AppWidgetProvider {static void updateAppWidget (context contextual, AppWidgetManager appWidgetManager, int appWidgetId) {// Instantiate l'objecte RemoteViews // RemoteViews views = RemoteViews (context.getPackageName (), R.layout.list ;_) setRemoteAdapter (context, visualitzacions); // Sol·liciteu que l'AppWidgetManager actualitzi el widget de l'aplicació // appWidgetManager.updateAppWidget (appWidgetId, visualitzacions); }

Creeu l'adaptador

Com que mostrem les nostres dades en un ListView, hem de definir un mètode setRemoteAdapter () al nostre AppWidgetProvider. El setRemoteAdapter () equival a trucar a AbsListView.setRemoteViewsAdapter (), però està dissenyat per utilitzar-se en ginys d’aplicació.

En aquest mètode, hem de definir l’identificador de l’AdapterView (R.id.widget_list) i la intenció del servei que finalment proporcionarà les dades a la nostra RemoteViewsAdapter; aviat crearem aquesta classe WidgetService.

private static void setRemoteAdapter (Context context, @NonNull final RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, new Intent (context, WidgetService.class)); }}

Definició dels mètodes del cicle de vida del giny

Al nostre AppWidgetProvider, també hem de definir els mètodes del cicle de vida del widget següents:

Recuperació de contingut nou amb onUpdate

El mètode del cicle de vida del widget onUpdate () és responsable de l'actualització de les visualitzacions del vostre giny amb informació nova.

Aquest mètode s'anomena cada vegada:

  • L'usuari du a terme una acció que desencadena manualment el mètode onUpdate ().
  • Ha transcorregut l’interval d’actualització de l’aplicació.
  • L'usuari col·loca una nova instància d'aquest giny a la pantalla inicial.
  • Una intenció de transmissió ACTION_APPWIDGET_RESTORED s'envia a l'AppWidgetProvider. Aquesta intenció de difusió es desencadena si el widget es restableix sempre des de còpia de seguretat.

Aquí també es registrarà qualsevol gestor d’esdeveniments que hauria d’utilitzar el vostre widget.

Quan actualitzeu un widget d'Android, és important recordar que els usuaris poden crear diverses instàncies del mateix giny. Per exemple, potser el vostre widget es pot personalitzar i l’usuari decideix crear diverses “versions” que mostren informació diferent o proporcionen accés a una funcionalitat única.

Quan truqueu a l’actualització (), heu d’especificar si actualitzeu totes les instàncies d’aquest widget o només una instància específica. Si voleu actualitzar cada instància, aleshores podeu utilitzar appWidgetIds, que és una matriu d'identificadors que identifiquen totes les instàncies del dispositiu.

Al fragment següent, actualitzo totes les instàncies:

@Override public void onUpdate (Context context, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Actualitzar totes les instàncies d’aquest widget // updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (context, appWidgetManager, appWidgetIds); }

Tingueu en compte que per ajudar a mantenir el codi senzill, actualment aquest mètode onUpdate () no fa cap canvi al giny.

onEnabled: realització de la configuració inicial

El mètode del cicle de vida onEnabled () s'anomena en resposta a ACTION_APPWIDGET_ENABLED, que s'envia quan s'afegeix una instància del vostre widget a la pantalla inicial per a la primer temps. Si l'usuari crea dues instàncies del vostre giny, llavors a OnEnabled () es cridarà a la primera instància, però no per a la segona.

El mètode del cicle de vida de OnEnabled () és el lloc on heu de realitzar qualsevol configuració necessària per a totes les instàncies del vostre widget, com ara la creació de la base de dades que alimentarà la informació del vostre widget.

Us mostraré un brindis, de manera que podreu veure exactament quan s’anomena aquest mètode del cicle de vida:

@Override public void onEnabled (Context context) {Toast.makeText (context, "onEnabled anomenat", Toast.LENGTH_LONG) .show (); }

Tingueu en compte que si l'usuari esborra totes les instàncies del widget i crea una nova instància, es classifica com a primera instància i es tornarà a trucar al mètode del cicle de vida onEnabled ().

Neteja, amb OnDisabled

El mètode onDisabled () s'anomena en resposta a ACTION_APPWIDGET_DISABLED, que s'activa quan l'usuari esborra el últim instància del vostre giny.

Aquest mètode del cicle de vida del widget és on haureu de netejar els recursos que hagueu creat en el mètode onEnabled (), per exemple esborrant la base de dades que heu creat a onEnabled ().

Per ajudar a mantenir el nostre codi senzill, només mostraré un brindis cada vegada que s'activa aquest mètode:

@Override public void onDisabled (Context context) {Toast.makeText (context, "onDisabled anomenat", Toast.LENGTH_LONG) .show (); }

S'ha completat l'AppWidgetProvider

Ara el fitxer CollectionWidget hauria de semblar una cosa així:

importar Android.appwidget.AppWidgetManager; importar Android.appwidget.AppWidgetProvider; importa android.content.Context; importa androidx.annotation.NonNull; importa android.content.Intent; importa android.widget.RemoteViews; importa android.widget.Toast; // Extendre-se de la classe AppWidgetProvider // classe pública CollectionWidget estén AppWidgetProvider {static void updateAppWidget (context contextual, AppWidgetManager appWidgetManager, int appWidgetId) {// Carrega el fitxer de recursos de disseny en un objecte RemoteViews // RemoteViews views (context RemoteViews) getPackageName (), R.layout.list_widget); setRemoteAdapter (context, visualitzacions); // Informeu AppWidgetManager sobre l'objecte RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, visualitzacions); } @Override public void onUpdate (Context context, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (context, appWidgetManager, appWidgetIds); } @Override public void onEnabled (Context context) {Toast.makeText (context, "OnEnabled anomenat", Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (Context context) {Toast.makeText (context, "onDisabled anomenat", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (Context context, @NonNull final RemoteViews views) {views.setRemoteAdapter (R.id.widget_list, new Intent (context, WidgetService.class)); }}

El fitxer AppWidgetProviderInfo

El widget de l'aplicació també requereix un fitxer AppWidgetProviderInfo, que defineix diverses propietats importants, incloses les dimensions mínimes del widget i la freqüència d'actualització.

El fitxer AppWidgetProviderInfo es guarda a la carpeta res / xml del projecte.

Si el vostre projecte ja no conté aquesta carpeta, haureu de crear-la:

  • Feu clic amb el botó de control a la carpeta de res del projecte.
  • Seleccioneu Nou> Directori de recursos d'Android.
  • A la finestra següent, obriu el menú desplegable Tipus de recurs i seleccioneu xml.
  • El nom del directori s’hauria d’actualitzar a xml automàticament, però si no és així, haurà de canviar-lo manualment.
  • Feu clic a D'acord.

A continuació, creeu un fitxer collection_widget_info, que farem servir com a AppWidgetProviderInfo:

  • Feu clic a la carpeta xml del vostre projecte.
  • Seleccioneu Nou> Fitxer de recursos XML.
  • Poseu un nom a aquest fitxer collection_widget_info.
  • Feu clic a D'acord.

Al nostre fitxer AppWidgetProviderInfo, hem de definir les propietats següents:

1. Android: previewImage

Aquest és el dibuix que representa el giny de la vostra aplicació al selector de widgets del dispositiu.

Si no proporcioneu una imatge prèvia, Android usarà en el seu lloc la icona de la vostra aplicació. Per animar els usuaris a seleccionar el seu giny al Selector de widgets, haureu de proporcionar un dibuix que mostra com es veurà el vostre widget un cop s'hagi configurat correctament a la pantalla inicial de l'usuari.

La forma més senzilla de crear una imatge prèvia és utilitzar l’aplicació de visualització prèvia de widget inclosa a l’emulador d’Android. Aquesta aplicació us permet configurar el vostre widget i, a continuació, generar una imatge que podreu utilitzar al vostre projecte Android.

Crearem aquesta imatge un cop haguem acabat de crear el nostre giny, de manera que de moment utilitzaré el recurs mipmap / ic_launcher generat automàticament com a imatge prèvia de vista temporal.

2. Android: widgetCategory

Els ginys d’aplicació s’han de situar dins d’un amfitrió d’aplicacions d’aplicacions, que sol ser la pantalla de pantalla inicial d’Android, però també pot ser un llançador de tercers com Evie Launcher o Nova Launcher.

Entre els nivells 17 i 20 de l'API, era possible col·locar ginys de l'aplicació a la pantalla inicial o el nivell de API de 21, però el suport de lockscreen es va deixar enrere en el nivell 21 de l'API.

Podeu especificar si el widget de l'aplicació es pot col·locar a la pantalla inicial, la pantalla de bloqueig (que Android es denomina "guia de teclat") o tots dos, mitjançant l'atribut Android: widgetCategory. Com que no és possible col·locar ginys a la pantalla de bloqueig a les versions més recents d'Android, només estarem orientats a la pantalla inicial.

Per preservar la privadesa de l’usuari, el giny no ha de mostrar cap informació sensible ni privada quan es col·loca a la pantalla de bloqueig.

Si els usuaris ofereixen la possibilitat de col·locar el seu giny a la pantalla de bloqueig, pot ser que qualsevol persona que miri el dispositiu de l'usuari pugui veure el seu widget i tot el contingut. Per preservar la privadesa de l’usuari, el giny no ha de mostrar cap informació sensible ni privada quan es col·loca a la pantalla de bloqueig. Si el widget conté dades personals, potser voldreu considerar la possibilitat de proporcionar dissenys separats de pantalla inicial i pantalla de pantalla de pantalla.

3. Android: inicialLayout

Aquest és el fitxer de recurs de maquetació que hauria d'utilitzar el vostre giny quan es col·loca a la pantalla d'inici, que per al nostre projecte és list_widget.xml.

4. Android: resizeMode = ”horitzontal | vertical”

L'atribut Android: resizeMode us permet especificar si el vostre widget es pot canviar de mida horitzontal, verticalment o al llarg dels dos eixos.

Per assegurar que els widgets es mostren i funcionen correctament en diverses pantalles, és recomanable que permeteu canviar la mida del widget horitzontalment. i verticalment, tret que tingueu un motiu específic per no fer-ho.

5. Android: minHeight i Android: minWidth

Si el widget és canviable, cal que l'usuari no redueixi el widget fins al punt que no es pugui utilitzar. Podeu utilitzar els atributs minHeight i minWidth per definir el més petit que la vostra aplicació es reduirà quan l’usuari l’hagi de redimensionar.

Aquests valors també representen la mida inicial del vostre giny, de manera que si el widget no es pot redimensionar, minHeight i minWidth definiran la mida permanent del widget.

6. Android: updatePeriodMillis

L'AppWidgetProviderInfo també és on especifiqueu la freqüència amb què el vostre widget ha de sol·licitar informació nova.

L’interval d’actualització suportat més petit és una vegada cada 1800000 mil·lisegons (30 minuts). Fins i tot si declareu un interval d’actualització més curt, el vostre widget només s’actualitzarà una vegada cada mitja hora.

Si bé és possible que vulgueu mostrar la informació més recent el més ràpidament possible, el sistema voluntat desperta un dispositiu de dormir per recuperar nova informació. Les actualitzacions freqüents poden gravar-se a través de la bateria del dispositiu, especialment en els períodes en què el dispositiu es deixa al ralentí durant un període important de temps, com per exemple durant la nit. Oferir la millor experiència possible als usuaris significa aconseguir un equilibri entre la limitació del consum de bateries i la informació nova en un termini de temps raonable.

També heu de tenir en compte el tipus de contingut que mostrarà el vostre widget.

També heu de tenir en compte el tipus de contingut que apareixeran per a Android. Per exemple, un widget meteorològic només pot necessitar recuperar una previsió actualitzada una vegada al dia, mentre que una aplicació que mostri notícies de ràpida haurà d’actualitzar-se amb més freqüència.

Per trobar aquest equilibri perfecte, potser haureu de provar el vostre widget en una gamma de freqüències d’actualització i mesurar l’impacte sobre la durada de la bateria i la puntualitat del contingut del vostre widget. Si teniu un grup de provadors disposat, podríeu fins i tot configurar proves A / B, per veure si algunes freqüències d’actualització es reben més positivament que d’altres.

Aalso va llegir: AndroidManifest.xml tot el que necessiteu saber

Finalment, un cop identificat l’interval d’actualització perfecte, potser voldreu utilitzar un interval més curt quan desenvolupeu i proveu l’aplicació. Per exemple, podríeu utilitzar la freqüència d’actualització més curta possible (Android: updatePeriodMillis = "1800000") quan estàs provant que el mètode onUpdate () de l'aplicació es dispara correctament i, a continuació, canvieu aquest valor abans de publicar la seva aplicació al públic en general.

S'ha completat l'AppWidgetProviderInfo

El fitxer acabat collection_widget_info.xml hauria de semblar una cosa així:

No obstruïu la pantalla d'inici de l'usuari.

Per assegurar-nos que la pantalla de casa no es vegi desordenada, haurem d’afegir una mica d’amplitud i marges al nostre giny. Si el vostre projecte ja no conté un fitxer dimens.xml, haureu de crear-ne un:

  • Feu clic amb el botó de control a la carpeta de valors del vostre projecte.
  • Seleccioneu Fitxer de recursos> Valors.
  • Dóna-li a aquest fitxer la dimensió del nom.
  • Feu clic a D'acord.

Obriu el fitxer dimens.xml i definiu els valors de marge i encoratjament següents:

10dp 8dp

S'està enviant les dades al giny

A continuació, hem de crear un servei de widget, que serà l’encarregat d’enviar les dades de la col·lecció al giny.

Creeu una classe de Java nova (Nova> Classe Java) anomenada WidgetService i afegiu el següent:

importa android.content.Intent; importa android.widget.RemoteViewsService; public class WidgetService estén RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (Intenció intenció) {retornar el nou DataProvider (aquesta, intenció); }}

Registre el vostre widget al manifest

Ara hem de fer alguns canvis al manifest del nostre projecte.

Per començar, obriu el Manifest i registreu el vostre giny com a BroadcastReceiver. També hem d’afegir un filtre d’intencions per a l’acció android.appwidget.action.APPWIDGET_UPDATE:

A continuació, cal que especifiqueu el proveïdor de widgets d'aplicacions:

Finalment, hem de declarar el servei que enviarà dades al nostre widget, que en aquesta instància és la classe WidgetService. Aquest servei requereix el permís per Android.permission.BIND_REMOTEVIEWS:

Poseu a prova el vostre widget

Si heu seguit aquest tutorial, ara tindreu un widget de col·lecció complet que mostra un conjunt de dades a la pantalla inicial de l’usuari.

Si es tractés d’un projecte Android de la vida real, normalment normalment s’ampliaran en els mètodes del cicle de vida, en particular el mètode onUpdate (), però tot això ens cal crear un widget que puguis instal·lar i provar al dispositiu Android:

  • Instal·leu aquest projecte en un smartphone Android, una tauleta o un AVD (dispositiu virtual Android) compatibles.
  • Premeu llargament qualsevol secció buida de la pantalla inicial i seleccioneu Widgets quan se us demani; això llança el selector de widgets.
  • Feu lliscar el selector de widgets fins a trobar el widget de l'aplicació que acabeu de crear.
  • Premeu llargament aquest widget per afegir-lo a la pantalla d'inici.
  • Com que es tracta de la primera instància d’aquest widget particular, el mètode onEnabled () hauria d’executar-se i veureu un brindis “onEnabled anomenat”.
  • Redimensiona el teu widget. Si definiu una mida mínima suportada, comproveu que no podeu reduir el widget més enllà d'aquest valor.
  • Prova que el ListView es desplaci, tal com s'esperava.
  • A continuació, heu de comprovar el mètode onDisabled (), suprimint el vostre giny. Premeu llargament el giny i, a continuació, seleccioneu Elimina de la pantalla inicial. Com que es tracta de la darrera instància d’aquest widget particular, el mètode onDisabled () s’hauria d’executar i veureu un brindis “onDisabled anomenat”.

Tot el que necessiteu per oferir un widget d'aplicació Android funcionant, però hi ha algunes addicions que sovint poden millorar l'experiència de l'usuari. A les seccions següents, animarem als usuaris a triar aquest giny a la selecció de widgets, creant una imatge prèvia que mostri el widget en el seu millor moment. També us mostraré com crear un widget totalment personalitzable, afegint una activitat de configuració al vostre projecte.

Creació d’una imatge de visualització de widget Android

Si agafeu el dispositiu Android i feu un pas llarg al selector de widgets, veureu que cada widget està representat per una imatge, que normalment demostra com es veurà aquest widget un cop s'hagi configurat a la pantalla inicial de l'usuari.

Per animar els usuaris a seleccionar el seu widget, haureu de proporcionar una imatge prèvia que mostri tota la informació i les funcions útils que ofereix el vostre widget.

Podeu crear de forma ràpida i senzilla una imatge prèvia, mitjançant l’aplicació de visualització prèvia de widget inclosa a l’emulador d’Android.

Tingueu en compte que la visualització prèvia del widget no s'inclou a les últimes imatges del sistema Android, així que haureu de crear un AVD amb Nougat (API Nivell 25) o anterior:

  • Instal·leu la vostra aplicació en un AVD que tingui API 25 o inferior.
  • Obriu el calaix d'aplicacions de l'AVD i inicieu l'aplicació Vista prèvia de widgets.
  • La Visualització prèvia del widget mostrarà una llista de totes les aplicacions instal·lades actualment en aquest AVD; seleccioneu l'aplicació de la llista.

  • El vostre giny es mostrarà ara en un fons en blanc. Dediqueu un temps a canviar de mida i a ajustar-lo fins que mostri el millor que pot oferir.
  • Una vegada que estigueu satisfet amb l’aspecte i el contingut del vostre widget, seleccioneu Captura de pantalla.

  • Per recuperar la captura de pantalla, torneu a Android Studio i seleccioneu Veure> Windows d'eines> Explorador de fitxers de dispositius de la barra d'eines. S’inicia l’explorador d’arxius de dispositius d’Android Studio.
  • A l'Explorador de fitxers de dispositiu, navegueu per descarregar / descarregar. Hauríeu de trobar la vostra imatge prèvia guardada en el format següent: _ori_.png

  • Arrossegueu aquesta imatge des d'Android Studio i col·loca-la en un lloc fàcilment accessible, com ara l'escriptori.
  • Poseu un nom descriptiu a aquest fitxer d’imatges.
  • Arrossegueu el fitxer a la carpeta dibuixable del vostre projecte.
  • Obriu el vostre AppWidgetProviderInfo, que per a aquest projecte és collection_widget_info.xml.
  • Cerqueu la línia Android: previewImage = "@ mipmap / ic_launcher" i actualitzeu-la per referir-vos a la imatge prèvia.

El vostre widget utilitzarà aquest recurs d'imatge nou com a imatge prèvia:

  • Instal·leu el projecte actualitzat al dispositiu Android físic o AVD.
  • Premeu llargament qualsevol secció buida de la pantalla d'inici.
  • Toqueu widgets, que llança el selector de widgets.
  • Desplaceu-vos al widget; ara hauria d’utilitzar la imatge prèvia actualitzada actualitzada.

Ginys personalitzables: Afegir una activitat de configuració

Una activitat de configuració es llança automàticament quan l’usuari col·loca cada instància del giny a la pantalla de casa.

Hi ha diverses raons per les quals és possible que vulgueu afegir una activitat de configuració al vostre projecte.

els ginys acostumen a proporcionar la millor experiència de l’usuari quan proporcionen accés a la informació o a les funcions que són més importants per a l’usuari individual.

En primer lloc, alguns widgets requereixen la configuració inicial, per exemple, un widget que mostri alertes de trànsit pot ser que necessiti conèixer l'adreça de casa de l'usuari, on treballen i els moments en què es mouen habitualment. Sense cap manera d'introduir aquesta informació, el vostre giny podria ser completament inútil.

A més, els ginys acostumen a proporcionar la millor experiència de l’usuari quan proporcionen accés a la informació o funcions més importants per a l’usuari individual. Si afegiu una activitat de configuració al vostre projecte, podeu donar als usuaris la llibertat de triar i triar exactament què hi ha inclòs al vostre giny.

Fins i tot, les personalitzacions relativament senzilles, com ara canviar el fons o el tipus de widget, poden tenir un impacte positiu en l’experiència de l’usuari. Al cap i a la fi, ningú no agrairà un giny que visualment coincideixi amb la resta de la pantalla de casa.

Ningú no agrairà un giny que xoca visualment amb la resta de la pantalla de casa.

De forma alternativa, de vegades pot ser que tingueu una llarga llista de contingut que vulgueu incloure al vostre widget i aneu lluitant per restringir les opcions. Una activitat de configuració pot ser una manera de fer servir totes les vostres idees sense creant un widget desordenat i confús. Tingueu en compte que la configuració d’un giny no hauria de semblar una feina, de manera que si proporcioneu una Activitat de configuració, us recomanem que us limitareu a tres opcions de configuració.

Afegim una activitat de configuració al nostre projecte!

En primer lloc, la nostra activitat de configuració necessita un disseny, de manera que crear un fitxer de recurs de disseny nou anomenat config_activity.xml.

Afegeixo els botons següents a aquesta disposició:

  • Un botó de configuració. En un projecte de la vida real, aquest botó modificaria el widget d'alguna manera, per exemple, afegint o eliminant contingut o canviant la freqüència amb què s'actualitza el widget. Per ajudar-nos a mantenir el nostre codi senzill, feu clic en aquest botó simplement mostrarà un brindis amb opcions de configuració.
  • Un botó de configuració. Un cop l’usuari estigui satisfet amb la configuració del seu widget, al prémer aquest botó es col·locarà el giny de nova configuració a la pantalla de casa.

Aquí teniu el meu fitxer config_activity.xml completat:

Creeu l’activitat de configuració

Ara, hem de crear la nostra activitat de configuració.

Per començar, creeu una nova classe Java anomenada ConfigActivity. En aquesta activitat, recuperarem l'ID de widget de l'aplicació amb la intenció que va iniciar l'activitat de configuració. Si aquesta intenció no té un ID de widget, haurem de trucar al mètode final ():

Intent intention = getIntent (); Paquet extra = inten.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

A continuació, hem de crear una intenció de retorn, passar l’appWidgetId original i definir els resultats de l’activitat de configuració:

Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultatValora); acabar (); }}}

Si proporcioneu una Activitat de configuració, l’emissió ACTION_APPWIDGET_UPDATE no s’enviarà automàticament quan s’iniciï l’Activitat de configuració, cosa que significa el mètode onUpdate (). no ho faré anomenar-se quan l’usuari crea una instància del seu giny.

Per assegurar-vos que el vostre widget es crea amb informació i contingut actualitzats, la vostra activitat de configuració haver de activar la primera sol·licitud d’actualització ().

Aquí teniu la configuració completa de ConfigActivity:

importa android.app.Activitat; importar Android.appwidget.AppWidgetManager; importa android.os.Bundle; importa android.widget.Button; importa android.content.Intent; importa android.view.View; importa android.view.View.OnClickListener; importa android.widget.Toast; public class ConfigActivity s'estén Activitat {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Botó setupWidget = (Botó) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (nou OnClickListener () {@Override public void onClick (Veure v) {handleSetupWidget ();}}); Botó configButton = (Botó) findViewById (R.id.configButton); configButton.setOnClickListener (nou OnClickListener () {@Override public void onClick (Veure v) {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "Opcions de configuració", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Intent intention = getIntent (); Paquet extra = inten.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // FER: Realitzeu la configuració // Resultat d’intencióValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultatValora); acabar (); }}}

Un cop hàgiu creat una activitat de configuració, heu de declarar aquesta activitat al manifest i especificar que accepta l’acció APPWIDGET_CONFIGURE:

Finalment, com que es fa referència a una activitat de configuració fora de l'abast del paquet, hem de declarar aquesta activitat al nostre AppWidgetProviderInfo, que en aquest cas és el fitxer collection_widget_info.xml:

Android: configure "" com.jessicathornsby.collectionwidget.ConfigActivity ">

Prova del vostre projecte

Ara és hora de posar a prova el vostre projecte acabat:

  • Instal·leu el vostre projecte actualitzat en un dispositiu Android físic o AVD.
  • Suprimeix totes les instàncies anteriors del giny, per assegurar-te de treballar amb la versió més recent.
  • Premeu llargament qualsevol zona buida de la pantalla de casa i seleccioneu Widgets quan se us demani.
  • Cerqueu el vostre widget al selector de widgets i premeu el botó llarg per seleccionar-lo.
  • Col·loca el widget a la pantalla d'inici. L’activitat de configuració s’hauria de llançar automàticament.
  • Feu un clic al botó Efectua una certa configuració i apareixerà un brindis amb les opcions de configuració, que confirma que aquesta interacció s'ha registrat correctament.
  • Imagineu-vos que heu ajustat la configuració del giny i que ja esteu a punt per col·locar-lo a la pantalla inicial; doneu un botó al botó Crea el widget i aquest widget s’ha de crear correctament.

Podeu descarregar el projecte de widget de la col·lecció completat de GitHub.

Embalatge

En aquest article, hem creat un giny de col·lecció desplaçable que mostra un conjunt de dades a la pantalla inicial de l’usuari.

Si voleu continuar treballant amb aquest projecte, podríeu provar d’afegir el vostre propi codi al mètode onUpdate (), per crear un giny que s’actualitzi amb informació nova a l’interval definit al fitxer AppWidgetProviderInfo (collection_widget_info).

Si creeu un widget Android, assegureu-vos de compartir les creacions als comentaris següents.

No tothom pot cantar ni tocar un intrument. No obtant això, aprendre la producció de múica i crear ritme bàic per a club o artite encara et pot permetre toca el teu múic inter...

El 2019 podria er el teu any de productivitat. i vol fer-te càrrec de la teva vida i er mé eficient, no età ol.Cada dia e deperta molta gent amb gane expliqueu tot el que cal fer a la l...

Us Recomanem