Codez un widget pour votre application Android: ajoutez une activité de configuration

Les widgets d’application offrent à vos utilisateurs un accès facile aux fonctionnalités les plus fréquemment utilisées de votre application, tout en donnant à votre application une présence sur l’écran d’accueil de l’utilisateur. En ajoutant un widget à votre projet, vous pouvez fournir une meilleure expérience utilisateur, tout en encourageant les utilisateurs à rester engagés avec votre application, car à chaque fois qu’ils jetteront un coup d’œil sur leur écran d’accueil, ils verront votre widget, affichant certains des plus utiles et contenu intéressant.

Dans cette série en trois parties, nous construisons un widget d’application qui a toutes les fonctionnalités que vous trouverez dans à peu près chaque Widget d’application Android.

Dans le premier article, nous avons créé un widget qui récupère et affiche les données et effectue une action unique en réponse à onClick événements. Puis dans le deuxième post, nous avons développé notre widget pour récupérer et afficher automatiquement de nouvelles données en fonction d’un planning, et en réponse à l’interaction de l’utilisateur.

Nous reprenons là où nous nous sommes arrêtés, donc si vous n’avez pas de copie du widget que nous avons créé dans la première partie, vous pouvez téléchargez-le depuis GitHub.

Améliorer votre widget avec une activité de configuration

Bien que notre widget soit prêt à l’emploi, certains widgets nécessitent une configuration initiale. Par exemple, un widget qui affiche les messages de l’utilisateur aura besoin de son adresse e-mail et de son mot de passe. Vous pouvez également donner à vos utilisateurs la possibilité de personnaliser le widget, par exemple en changeant sa couleur ou même en modifiant ses fonctionnalités, comme la fréquence de mise à jour du widget.

Si votre widget est personnalisable ou nécessite une configuration, vous devez inclure un Activité de configuration, qui se lancera automatiquement dès que l’utilisateur place le widget sur son écran d’accueil.

Les activités de configuration peuvent également être utiles si vous avez beaucoup d’idées sur les informations et les fonctionnalités que vous souhaitez inclure dans votre widget. Plutôt que d’entasser tout ce contenu dans une mise en page complexe et potentiellement déroutante, vous pouvez fournir une activité de configuration où les utilisateurs choisissent et choisissent le contenu qui leur tient à cœur.

Si vous incluez une activité de configuration, ne vous laissez pas emporter, car il y a un point où choix devient trop de choix. La configuration d’un widget ne devrait pas sembler difficile, il est donc recommandé de limiter votre widget à deux ou trois options de configuration. Si vous avez du mal à ne pas dépasser cette limite, alors considérez si tout ce choix est vraiment nécessaire, ou s’il s’agit simplement d’ajouter une complexité inutile au processus de configuration.

Pour créer une activité de configuration, vous devez suivre les étapes suivantes.

1. Créez la présentation de l’activité

C’est exactement la même chose que la création de la mise en page pour une activité normale, créez donc un nouveau fichier de ressources de mise en page et ajoutez tous vos éléments d’interface utilisateur comme d’habitude.

Une activité de configuration est l’endroit où l’utilisateur effectue la configuration initiale, de sorte qu’une fois qu’il a terminé cette activité, il est peu probable qu’il en ait à nouveau besoin. Étant donné que la disposition d’un widget est déjà plus petite qu’une disposition d’activité normale, vous ne devez pas perdre d’espace précieux en donnant aux utilisateurs un moyen de relancer l’activité de configuration directement à partir de la disposition du widget.

Ici, je crée un simple configuration_activity.xml fichier de ressources de mise en page contenant un bouton qui, lorsqu’il est touché, créera le widget d’application.

2. Créez votre classe de configuration

Votre activité de configuration doit inclure l’ID du widget d’application transmis par le Intent qui a lancé l’activité de configuration.

Si vous faire inclure une activité de configuration, puis notez que le onUpdate() ne sera pas appelée lorsque l’utilisateur crée une instance de widget, car la ACTION_APPWIDGET_UPDATE la diffusion n’est pas envoyée lorsqu’une activité de configuration est lancée. Il est de la responsabilité de l’activité de configuration de demander cette première mise à jour directement AppWidgetManager. le onUpdate() sera appelée normalement pour toutes les mises à jour ultérieures.

Créez une nouvelle classe Java nommée configActivity et ajoutez ce qui suit:

3. Déclarez l’activité de configuration dans le manifeste de votre projet

Lorsque vous déclarez votre activité de configuration dans le Manifeste, vous devez spécifier qu’il accepte le ACTION_APPWIDGET_CONFIGURE action:

4. Déclarez l’activité de configuration dans votre AppWidgetProviderInfo Fichier

Étant donné que l’activité de configuration est référencée en dehors de la portée de votre package, vous devez la déclarer à l’aide de l’espace de noms complet:

Désormais, chaque fois que vous créez une nouvelle instance de ce widget, l’activité de configuration sera lancée et vous devrez compléter toutes les options de cette activité avant la création de votre widget. Dans ce cas, cela signifie simplement donner le Créer un widget bouton un robinet.

En relation :  Les 6 meilleures applications de compteur de score pour Android
Tester l'activité de configuration du widget d'application

Souviens-toi, tu peux télécharger le widget terminé, complet avec l’activité de configuration, à partir de GitHub.

Meilleures pratiques relatives aux widgets d’application

Tout au long de cette série, nous avons créé un widget d’application qui présente toutes les fonctionnalités de base que vous trouverez dans pratiquement tous les widgets d’application Android. À ce stade, vous savez comment créer un widget qui récupère et affiche des données, réagit à onClick événements, mises à jour avec de nouvelles informations basées sur un calendrier et en réponse à l’interaction de l’utilisateur, et dispose d’une image d’aperçu personnalisée.

Ceux-ci peuvent être les éléments fondamentaux des widgets d’applications Android, mais créer quelque chose qui travaux n’est jamais suffisant – vous devez également vous assurer que votre widget offre une bonne expérience utilisateur, en suivant les meilleures pratiques.

Effectuer des opérations chronophages hors du fil principal

Les widgets ont les mêmes restrictions d’exécution que les récepteurs de diffusion normaux, ils ont donc le potentiel de bloquer le fil d’interface utilisateur principal d’Android.

Android a un seul thread où tout le code de votre application s’exécute par défaut, et comme Android ne peut traiter qu’une tâche à la fois, il est facile de bloquer ce thread important. Effectuez tout type d’opération de longue durée ou intensive sur le thread principal, et l’interface utilisateur de votre application ne répondra pas tant que l’opération ne sera pas terminée. Dans le pire des cas, cela peut entraîner Android L’application ne répond pas (ANR) et l’application plante.

Si votre widget doit effectuer des tâches chronophages ou laborieuses, vous devez utiliser un service plutôt que le thread principal. Vous pouvez créer le service normalement, puis le démarrer dans votre AppWidgetProvider. Par exemple, nous utilisons ici un service pour mettre à jour notre widget:

Créer une mise en page flexible

La création d’une mise en page qui peut s’adapter à une gamme de configurations d’écran est l’une des règles les plus importantes du développement pour Android, et c’est une règle qui s’étend également aux widgets. Tout comme les activités normales, la disposition de votre widget doit être suffisamment flexible pour s’afficher et fonctionner correctement quelle que soit la configuration de l’écran, mais il existe des raisons supplémentaires pour lesquelles les dispositions de widget doivent être aussi flexibles que possible.

Premièrement, si votre widget est redimensionnable, l’utilisateur peut augmenter et réduire manuellement la taille de votre widget, ce dont vous n’avez pas à vous soucier avec les activités traditionnelles.

Deuxièmement, rien ne garantit que votre widget minWidth et minHeight les mesures s’aligneront parfaitement sur la grille de l’écran d’accueil d’un appareil particulier. Lorsqu’un widget ne convient pas parfaitement, le système d’exploitation Android étendra ce widget horizontalement et / ou verticalement pour occuper le nombre minimum de cellules requis pour satisfaire le widget. minWidth et minHeight contraintes. Bien que cela ne devrait pas être une augmentation significative, il convient de noter que dès le début, votre widget peut occuper plus d’espace que vous ne l’aviez prévu.

En relation :  Amazon supprime les publicités des téléphones exclusifs Prime

La création d’une disposition de widget flexible suit les mêmes bonnes pratiques que la conception d’une disposition d’activité flexible. Il y a déjà beaucoup d’informations disponibles sur ce sujet, mais voici quelques-uns des points les plus importants à garder à l’esprit lors de la création de vos dispositions de widget:

  • Évitez les unités de mesure absolues, telles que la définition d’un bouton en pixels. En raison des différentes densités d’écran, 50 pixels ne se traduisent pas par la même taille physique sur tous les appareils. Donc un 50px Le bouton apparaîtra plus grand sur les écrans basse densité et plus petit sur les écrans haute densité. Vous devriez toujours spécifiez les dimensions de votre mise en page en unités indépendantes de la densité (ppp) et utilisez des éléments flexibles tels que wrap_content et match_parent.
  • Fournissez des ressources alternatives optimisées pour différentes densités d’écran. Vous pouvez également fournir des mises en page optimisées pour différentes tailles d’écran, en utilisant des qualificatifs de configuration tels que smallestWidth (sw<N>dp). N’oubliez pas de fournir une version par défaut de chaque ressource, afin que votre application ait quelque chose sur quoi se rabattre si jamais elle rencontre un écran avec des caractéristiques pour lesquelles elle n’a pas de ressource spécifique. Vous devez concevoir ces ressources par défaut pour Ordinaire, densité moyenne écrans.
  • Testez votre widget sur autant d’écrans que possible, à l’aide de l’émulateur Android. Lors de la création d’un AVD, vous pouvez spécifier une taille d’écran et une résolution exactes à l’aide du Écran contrôles qui apparaissent dans le Configurer ce profil matériel menu. N’oubliez pas de tester comment votre widget gère le redimensionnement sur tous ces différents écrans!
Testez votre widget sur une gamme d'AVD à l'aide de l'émulateur

Ne réveillez pas l’appareil

La mise à jour d’un widget nécessite une alimentation par batterie et le système d’exploitation Android n’a aucun scrupule à réveiller un appareil en veille afin d’effectuer une mise à jour, ce qui amplifie l’impact de votre widget sur la batterie de l’appareil.

Si l’utilisateur se rend compte que votre widget décharge sa batterie, il supprimera au moins ce widget de son écran d’accueil. Dans le pire des cas, ils peuvent même supprimer complètement votre application.

Vous devez toujours vous efforcer de mettre à jour votre widget aussi rarement que possible tout en affichant des informations opportunes et pertinentes. Cependant, certains widgets peuvent avoir une raison légitime de nécessiter des mises à jour fréquentes, par exemple, si le widget comprend un contenu hautement sensible au temps.

Dans ce scénario, vous pouvez réduire l’impact de ces mises à jour fréquentes sur la durée de vie de la batterie en effectuant des mises à jour basées sur une alarme qui ne réveillera pas un appareil en veille. Si cette alarme se déclenche pendant que l’appareil est en veille, la mise à jour ne sera délivrée qu’au prochain réveil de l’appareil.

Pour mettre à jour en fonction d’une alarme, vous devez utiliser le AlarmManager pour régler une alarme avec un Intent que votre AppWidgetProvider recevra, puis définissez le type d’alarme sur ELAPSED_REALTIME ou RTC, car ces types d’alarmes ne réveilleront pas un appareil endormi. Par exemple:

Si vous utilisez une alarme, assurez-vous d’ouvrir le fichier AppWidgetProviderInfo de votre projet (res / xml / new_app_widget_info.xml) et réglez le updatePeriodMillis à zéro (““). Si vous oubliez cette étape, le updatePeriodMillis valeur remplacera la AlarmManager et votre widget réveillera toujours l’appareil chaque fois qu’il nécessite une mise à jour.

Conclusion

Dans cette série en trois parties, nous avons créé un widget d’application Android qui montre comment implémenter toutes les fonctionnalités les plus courantes des widgets d’application.

Si vous suivez depuis le début, vous aurez alors construit un widget qui se met à jour automatiquement et en réponse à l’entrée de l’utilisateur, et qui est capable de réagir à onClick événements. Enfin, nous avons examiné quelques bonnes pratiques pour vous assurer que votre widget offre une bonne expérience utilisateur, et expliqué comment améliorer votre widget avec une activité de configuration.

Merci d’avoir lu, et pendant que vous êtes ici, consultez quelques-uns de nos autres articles intéressants sur le développement d’applications Android!

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.