Utwórz widżet na Androida dla swojej aplikacji

Autor: Lewis Jackson
Data Utworzenia: 13 Móc 2021
Data Aktualizacji: 1 Lipiec 2024
Anonim
Utwórz widżet na Androida dla swojej aplikacji - Aplikacje
Utwórz widżet na Androida dla swojej aplikacji - Aplikacje

Zawartość


Od samego początku systemu operacyjnego widżety na Androida umożliwiają użytkownikom korzystanie z ulubionych aplikacji z poziomu ekranu głównego. Jak więc utworzyć widget na Androida?

Dla programistów widżety zapewniają Twojej aplikacji cenną obecność na ekranie głównym użytkownika. Zamiast schować się w szufladzie aplikacji, użytkownicy otrzymają przypomnienie o Twojej aplikacji za każdym razem spoglądają na ekran główny - jednocześnie uzyskując podgląd najciekawszych i najbardziej przydatnych treści Twojej aplikacji.

Widżety zapewniają Twojej aplikacji cenną obecność na ekranie głównym użytkownika

W tym artykule pokażę, jak zapewnić lepszą obsługę, a jednocześnie zachęcić użytkowników do współpracy z Twoją aplikacją, tworząc widget na Androida! Pod koniec tego artykułu utworzysz widżet kolekcji przewijalnej, który wyświetla pełny zestaw danych na ekranie głównym użytkownika.

Aby upewnić się, że dostarczasz widżet, który użytkownicy chcieć do umieszczenia na ekranie głównym, utworzymy również Aktywność konfiguracyjną, która pozwoli użytkownikom dostosować zawartość, wygląd i funkcje widżetu. Na koniec pokażę, w jaki sposób możesz zachęcić użytkowników do korzystania z Twojego widżetu, tworząc obraz podglądu widżetu, który pokazuje to, co najlepiej oferuje widżet.


Przeczytaj także: Opracowywanie dla urządzeń składanych: co musisz wiedzieć

Co to są widżety na Androida?

Widżet aplikacji to lekka, miniaturowa aplikacja, która znajduje się na ekranie głównym użytkownika.

Widżety dla Androida mogą zawierać wiele treści, ale ogólnie należą do jednej z następujących kategorii:

  • Widżet informacyjny. To nie można przewijać widżetu, który wyświetla niektóre informacje, takie jak dzisiejsza prognoza pogody lub data i godzina.
  • Widżety kolekcji. Jest to przewijalny widget, który wyświetla zestaw powiązanych danych, sformatowanych jako ListView, GridView, StackView lub AdapterViewFlipper. Widżety kolekcji są zwykle wspierane przez źródło danych, takie jak baza danych lub macierz.
  • Kontroluj widżety. Te widżety działają jak zdalne sterowanie, które umożliwia użytkownikom interakcję z Twoją aplikacją, bez konieczność przeniesienia go na pierwszy plan. Aplikacje odtwarzające multimedia, takie jak podcasty lub muzyka, często mają widżety kontrolne, które pozwalają użytkownikowi uruchamiać akcje Play, Pause i Skip bezpośrednio z ekranu głównego.
  • Widżety hybrydowe. Czasami możesz zapewnić lepszą obsługę, łącząc elementy z wielu kategorii. Na przykład, jeśli opracowujesz widżet kontrolny dla aplikacji muzycznej, możesz podać elementy sterujące Odtwarzaj, Wstrzymaj i Pomiń, ale możesz również zdecydować o wyświetleniu niektórych informacji, takich jak tytuł utworu i wykonawca. Jeśli zdecydujesz się mieszać i łączyć, nie daj się ponieść emocjom! Widżety zwykle zapewniają najlepszą obsługę, gdy zapewniają łatwy dostęp do niewielkiej ilości aktualnych, istotnych informacji lub kilku często używanych funkcji. Aby zachować niską wagę widgetów hybrydowych, zalecamy zidentyfikowanie głównej kategorii widgetu, opracowanie go zgodnie z tą kategorią oraz następnie dodaj kilka elementów z dodatkowej kategorii widżetu.

Czy mój projekt naprawdę potrzebuje widżetu aplikacji?

Istnieje kilka powodów, dla których warto rozważyć dodanie widżetu aplikacji do swojego projektu na Androida.


Widżety dla Androida mogą poprawić wrażenia użytkownika

Zasadniczo im mniej kroków nawigacyjnych jest wymaganych do wykonania zadania, tym lepsze wrażenia użytkownika.

Udostępniając widget aplikacji, możesz usunąć wiele kroków nawigacyjnych z najczęściej używanych przepływów aplikacji. W najlepszym przypadku użytkownicy będą mogli uzyskać potrzebne informacje, zerkając na ekran główny lub wykonując pożądane zadanie, po prostu naciskając przycisk w widżecie sterowania.

Bardziej wydajny niż skróty do aplikacji

Widżety aplikacji często reagują na zdarzenia onClick, uruchamiając najwyższy poziom w powiązanej aplikacji, podobnie jak skrót do aplikacji. Widżety mogą jednak również zapewniać bezpośredni dostęp do określonych działań w aplikacji, na przykład stuknięcie powiadomienia o otrzymaniu nowego widżetu może uruchomić powiązaną aplikację z nową, już otwartą.

Osadzając wiele linków w układzie widżetu, możesz zapewnić dostęp jednym kliknięciem do wszystkich najważniejszych działań aplikacji, usuwając jeszcze więcej kroków nawigacyjnych z najczęściej używanych przepływów.

Osadzając wiele linków w układzie widżetu, możesz zapewnić dostęp jednym kliknięciem do wszystkich najważniejszych działań aplikacji.

Pamiętaj, że widżety reagują tylko na zdarzenia onClick, co zapobiega przypadkowym interakcjom użytkowników z widżetem podczas przesuwania się po ekranie głównym. Jedynym wyjątkiem jest sytuacja, gdy użytkownik próbuje usunąć widżet, przeciągając go w stronę akcji Usuń na ekranie głównym, ponieważ w tym scenariuszu widżet zareaguje na gest przeciągnięcia w pionie.

Ta interakcja jest zarządzana przez system Android, więc nie musisz się martwić o ręczne wdrożenie obsługi pionowego przesuwania w widżecie.

Utwórz widżet na Androida, aby zwiększyć długoterminowe zaangażowanie

Przekonanie ludzi do pobrania Twojej aplikacji to tylko pierwszy krok do stworzenia udanej aplikacji na Androida. Możliwe, że jeśli weźmiesz własny smartfon lub tablet z Androidem i przejrzysz szufladę aplikacji, odkryjesz wiele aplikacji, z których nie korzystałeś przez kilka dni, tygodni, a nawet miesięcy!

Czytaj także:Rozpoczęcie pracy z pakietem SDK usługi Facebook dla Androida

Gdy aplikacja zostanie pomyślnie zainstalowana na urządzeniu użytkownika, musisz ciężko pracować, aby była zaangażowana i cieszyła się aplikacją. Obecność aplikacji na ekranie głównym może być potężnym narzędziem pomagającym w długoterminowym zaangażowaniu, ponieważ jest to ciągłe przypomnienie o istnieniu Twojej aplikacji!

Dobrze zaprojektowany widget może również służyć jako reklama ciągła dla Twojej aplikacji. Za każdym razem, gdy użytkownik spogląda na ekran główny, widget ma okazję aktywnie zachęcić go do ponownego włączenia się w Twoją aplikację, prezentując mu wszystkie najciekawsze i najbardziej użyteczne treści.

Tworzenie widżetu aplikacji kolekcji

W tym samouczku zbudujemy widget kolekcji, który wyświetla tablicę jako przewijaną ListView.

Aby pomóc Ci śledzić cykl życia widgetu aplikacji, ten widget będzie także uruchamiał różne tosty, gdy porusza się w różnych stanach cyklu życia. Pod koniec tego samouczka wzbogacimy nasz widżet o niestandardowy obraz podglądu, który będzie wyświetlany w Próbniku widżetów Androida, oraz działanie konfiguracyjne, które pozwoli użytkownikom dostosować widżet przed umieszczeniem go na ekranie głównym.

Utwórz nowy projekt na Androida z wybranymi ustawieniami i zacznijmy!

Budowanie układu widżetu

Na początek zdefiniuj interfejs użytkownika widgetu (UI).

Widżety aplikacji są wyświetlane w procesie na zewnątrz aplikacji, dzięki czemu można używać tylko układów i widoków obsługiwanych przez RemoteView.

Podczas budowania układu jesteś ograniczony do następujących elementów:

  • Zegar analogowy
  • Przycisk
  • Chronometr
  • FrameLayout
  • GridLayout
  • ImageButton
  • ImageView
  • Układ liniowy
  • Pasek postępu
  • RelativeLayout
  • Widok tekstu
  • ViewStub
  • AdapterViewFlipper
  • GridView
  • ListView
  • StackView
  • ViewFlipper

Zauważ, że podklasy powyższych klas i widoków są nie utrzymany.

Utwórz nowy plik zasobów układu o nazwie list_widget.xml. Ponieważ będziemy wyświetlać nasze dane za pomocą ListView, ten układ służy głównie jako kontener dla element:

Wypełnianie widżetu kolekcji

Następnie musimy utworzyć dostawcę danych dla naszego ListView. Utwórz nową klasę Java o nazwie DataProvider.java i dodaj następujące elementy:

import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; import statyczny android.R.id.text1; importuj statyczny android.R.layout.simple_list_item_1; DataProvider klasy publicznej implementuje RemoteViewsService.RemoteViewsFactory {Lista myListView = new ArrayList <> (); Kontekst mContext = null; public DataProvider (kontekst kontekstowy, zamiar zamierzony) {mContext = kontekst; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override public RemoteViews getViewAt (int position) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (pozycja)); widok powrotu; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override public long getItemId (int position) {return return; } @Override public boolean hasStableIds () {return true; } private void initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add („Element ListView” + i); }}}

AppWidgetProvider: Konfigurowanie widgetu

Aby utworzyć widżet na Androida, musisz utworzyć kilka plików.

Nasz pierwszy plik specyficzny dla widżetu to AppWidgetProvider, który jest BroadcastReceiver, w którym zdefiniujesz różne metody cyklu życia widżetu, takie jak metoda wywoływana przy pierwszym tworzeniu widżetu i metoda wywoływana, gdy widżet zostanie ostatecznie usunięty.

Utwórz nową klasę Java (Plik> Nowy> Klasa Java) o nazwie CollectionWidget.

Aby rozpocząć, wszystkie pliki dostawcy widgetów muszą pochodzić z klasy AppWidgetProvider. Następnie musimy załadować plik zasobów układu list_widget.xml do obiektu RemoteViews i poinformować AppWidgetManager o zaktualizowanym obiekcie RemoteViews:

klasa publiczna CollectionWidget rozszerza AppWidgetProvider {static void updateAppWidget (kontekst kontekstowy, AppWidgetManager appWidgetManager, int appWidgetId) {// Utwórz instancję obiektu RemoteViews // RemoteViews views = nowe RemoteViews (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (kontekst, widoki); // Żądanie, aby AppWidgetManager aktualizował widget aplikacji // appWidgetManager.updateAppWidget (appWidgetId, widoki); }

Utwórz adapter

Ponieważ wyświetlamy nasze dane w ListView, musimy zdefiniować metodę setRemoteAdapter () w naszym AppWidgetProvider. Metoda setRemoteAdapter () jest równoważna wywołaniu AbsListView.setRemoteViewsAdapter (), ale została zaprojektowana do użytku w widżetach aplikacji.

W tej metodzie musimy zdefiniować identyfikator AdapterView (R.id.widget_list) oraz cel usługi, która ostatecznie dostarczy dane do naszego RemoteViewsAdapter - wkrótce stworzymy tę klasę WidgetService.

prywatny statyczny void setRemoteAdapter (kontekst kontekstowy, @NonNull końcowe widoki RemoteView) {views.setRemoteAdapter (R.id.widget_list, nowa intencja (kontekst, WidgetService.class)); }}

Definiowanie metod cyklu życia widgetu

W naszym AppWidgetProvider musimy również zdefiniować następujące metody cyklu życia widgetu:

Pobieranie nowej zawartości za pomocą onUpdate

Metoda cyklu życia widżetu onUpdate () odpowiada za aktualizację Widżetów widżetu o nowe informacje.

Ta metoda jest wywoływana za każdym razem:

  • Użytkownik wykonuje akcję, która ręcznie wyzwala metodę onUpdate ().
  • Upłynął określony interwał aktualizacji aplikacji.
  • Użytkownik umieszcza nową instancję tego widgetu na ekranie głównym.
  • Zamiar transmisji ACTION_APPWIDGET_RESTORED jest wysyłany do dostawcy AppWidgetProvider. Ten zamiar rozgłaszania jest uruchamiany, jeśli widżet zostanie kiedykolwiek przywrócony z kopii zapasowej.

W tym miejscu możesz również zarejestrować moduły obsługi zdarzeń, których powinien używać widget.

Podczas aktualizowania widżetu na Androida pamiętaj, że użytkownicy mogą tworzyć wiele instancji tego samego widżetu. Na przykład być może Twój widget można dostosować, a użytkownik zdecyduje się utworzyć kilka „wersji” wyświetlających różne informacje lub zapewniających dostęp do unikalnych funkcji.

Podczas wywoływania funkcji onUpdate () musisz określić, czy aktualizujesz każde wystąpienie tego widżetu, czy tylko określone wystąpienie. Jeśli chcesz zaktualizować każdą instancję, możesz użyć appWidgetIds, która jest tablicą identyfikatorów, która identyfikuje każdą instancję na urządzeniu.

W poniższym fragmencie aktualizuję każdą instancję:

@Override public void onUpdate (kontekst kontekstowy, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {// Zaktualizuj wszystkie instancje tego widgetu // updateAppWidget (kontekst, appWidgetManager, appWidgetId); } super.onUpdate (kontekst, appWidgetManager, appWidgetIds); }

Pamiętaj, że aby ułatwić zachowanie kodu, ta metoda onUpdate () obecnie nie wprowadza żadnych zmian w widżecie.

onEnabled: Przeprowadzanie konfiguracji początkowej

Metoda cyklu życia onEnabled () jest wywoływana w odpowiedzi na ACTION_APPWIDGET_ENABLED, która jest wysyłana, gdy instancja widgetu zostanie dodana do ekranu głównego dla pierwszy czas. Jeśli użytkownik utworzy dwa wystąpienia twojego widgetu, to onEnabled () zostanie wywołany dla pierwszego wystąpienia, ale nie po drugie.

Metoda cyklu życia onEnabled () to miejsce, w którym należy wykonać konfigurację wymaganą dla wszystkich instancji widżetu, na przykład utworzyć bazę danych, która będzie dostarczać informacje o widżecie.

Zamierzam wyświetlić toast, abyś mógł dokładnie zobaczyć, kiedy nazywa się ta metoda cyklu życia:

@Override public void onEnabled (kontekst kontekstowy) {Toast.makeText (kontekst, „onEnabled nazywany”, Toast.LENGTH_LONG) .show (); }

Należy zauważyć, że jeśli użytkownik usunie wszystkie wystąpienia widgetu, a następnie utworzy nowe wystąpienie, zostanie to zaklasyfikowane jako pierwsze wystąpienie, a metoda cyklu życia onEnabled () zostanie ponownie wywołana.

Czyszczenie za pomocą onDisabled

Metoda onDisabled () jest wywoływana w odpowiedzi na ACTION_APPWIDGET_DISABLED, która jest uruchamiana, gdy użytkownik usuwa ostatni, ubiegły, zeszły wystąpienie twojego widżetu.

Ta metoda cyklu życia widgetu służy do czyszczenia wszystkich zasobów utworzonych w metodzie onEnabled (), na przykład usuwania bazy danych utworzonej w onEnabled ().

Aby nasz kod był prosty, po prostu wyświetlam toast za każdym razem, gdy ta metoda zostanie uruchomiona:

@Override public void onDisabled (kontekst kontekstowy) {Toast.makeText (kontekst, „onDisabled nazywany”, Toast.LENGTH_LONG) .show (); }

Ukończony AppWidgetProvider

Twój plik CollectionWidget powinien teraz wyglądać mniej więcej tak:

import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import androidx.annotation.NonNull; import android.content.Intent; import android.widget.RemoteViews; import android.widget.Toast; // Rozszerzenie z klasy AppWidgetProvider // klasa publiczna CollectionWidget rozszerza AppWidgetProvider {static void updateAppWidget (kontekst kontekstowy, AppWidgetManager appWidgetManager, int appWidgetId) {// Załaduj plik zasobów układu do obiektu RemoteViews // Widoki RemoteViews = nowe RemoteViews (kontekst. getPackageName (), R.layout.list_widget); setRemoteAdapter (kontekst, widoki); // Poinformuj AppWidgetManager o obiekcie RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, widoki); } @Override public void onUpdate (kontekst kontekstowy, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId: appWidgetIds) {updateAppWidget (kontekst, appWidgetManager, appWidgetId); } super.onUpdate (kontekst, appWidgetManager, appWidgetIds); } @Override public void onEnabled (kontekst kontekstowy) {Toast.makeText (kontekst, „onEnabled nazywany”, Toast.LENGTH_LONG) .show (); } @Override public void onDisabled (kontekst kontekstowy) {Toast.makeText (kontekst, „onDisabled nazywany”, Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (kontekst kontekstowy, @NonNull końcowe widoki RemoteViews) {views.setRemoteAdapter (R.id.widget_list, nowa intencja (kontekst, WidgetService.class)); }}

Plik AppWidgetProviderInfo

Widżet aplikacji wymaga również pliku AppWidgetProviderInfo, który definiuje kilka ważnych właściwości, w tym minimalne wymiary widgetu i częstotliwość jego aktualizacji.

Plik AppWidgetProviderInfo jest przechowywany w folderze res / xml projektu.

Jeśli twój projekt nie zawiera jeszcze tego folderu, musisz go utworzyć:

  • Kliknij z wciśniętym klawiszem Control folder res projektu.
  • Wybierz Nowy> Katalog zasobów Androida.
  • W kolejnym oknie otwórz listę rozwijaną Typ zasobu i wybierz xml.
  • Nazwa katalogu powinna zostać automatycznie zaktualizowana do xml, ale jeśli nie, musisz ją zmienić ręcznie.
  • Kliknij OK.

Następnie utwórz plik collection_widget_info, którego będziemy używać jako naszego AppWidgetProviderInfo:

  • Kliknij z wciśniętym klawiszem Control w folderze xml swojego projektu.
  • Wybierz Nowy> Plik zasobów XML.
  • Nazwij ten plik info_widget_info.
  • Kliknij OK.

W naszym pliku AppWidgetProviderInfo musimy zdefiniować następujące właściwości:

1. android: PreviewImage

To jest rysunek, który reprezentuje widget aplikacji w selektorze widżetów urządzenia.

Jeśli nie udostępnisz podglądu obrazu, system Android użyje zamiast tego ikony aplikacji. Aby zachęcić użytkowników do wybrania widżetu z Widgetu, należy udostępnić rysunek, który pokazuje, jak będzie wyglądał widżet po prawidłowym skonfigurowaniu na ekranie głównym użytkownika.

Najłatwiejszym sposobem utworzenia obrazu podglądu jest użycie aplikacji Widget Preview zawartej w emulatorze Androida. Ta aplikacja pozwala skonfigurować widżet, a następnie wygenerować obraz, który można następnie wykorzystać w projekcie Android.

Utworzymy ten obraz, gdy zakończymy tworzenie naszego widżetu, więc na razie będę korzystać z automatycznie generowanego zasobu mipmap / ic_launcher jako tymczasowego podglądu obrazu.

2. android: widgetCategory

Widżety aplikacji muszą być umieszczone w hoście widżetu aplikacji, który jest zwykle standardowym ekranem głównym Androida, ale może być także zewnętrznym programem uruchamiającym, takim jak Evie Launcher lub Nova Launcher.

Pomiędzy poziomami API 17 i 20 możliwe było umieszczenie widżetów aplikacji na ekranie głównym lub blokada ekranu, ale obsługa blokady ekranu była przestarzała na poziomie API 21.

Możesz określić, czy widżet aplikacji może być umieszczony na ekranie głównym, ekranie blokady (który Android określa jako „blokada klawiatury”), czy na obu tych urządzeniach, używając atrybutu android: widgetCategory. Ponieważ w najnowszych wersjach Androida nie można umieszczać widżetów na ekranie blokady, będziemy kierować reklamy tylko na ekran główny.

Aby zachować prywatność użytkownika, widżet nie powinien wyświetlać żadnych poufnych ani prywatnych informacji, gdy jest umieszczony na ekranie blokady.

Jeśli dasz użytkownikom opcję umieszczenia widgetu na ekranie blokady, każdy, kto spojrzy na urządzenie użytkownika, może potencjalnie zobaczyć Twój widget i całą jego zawartość. Aby zachować prywatność użytkownika, widżet nie powinien wyświetlać żadnych poufnych ani prywatnych informacji, gdy jest umieszczony na ekranie blokady. Jeśli widget zawiera dane osobowe, możesz rozważyć udostępnienie osobnych układów ekranu głównego i ekranu blokady.

3. Android: initialLayout

Jest to plik zasobów układu, którego powinien użyć Twój widget po umieszczeniu na ekranie głównym, którym w naszym projekcie jest list_widget.xml.

4. android: resizeMode = „poziomo | pionowo”

Atrybut android: resizeMode pozwala określić, czy można zmienić rozmiar widżetu w poziomie, w pionie, czy wzdłuż obu osi.

Aby zapewnić prawidłowe wyświetlanie i funkcjonowanie widżetu na różnych ekranach, zaleca się zezwolenie na zmianę rozmiaru widżetu w poziomie i pionowo, chyba że masz konkretny powód, aby tego nie robić.

5. Android: minHeight i android: minWidth

Jeśli można zmienić rozmiar widżetu, musisz upewnić się, że użytkownik nie zmniejszy widżetu do punktu, w którym stanie się bezużyteczny. Możesz użyć atrybutów minHeight i minWidth, aby zdefiniować najmniejszy rozmiar aplikacji, który skurczy się, gdy użytkownik zmieni jej rozmiar.

Wartości te reprezentują również początkowy rozmiar widżetu, więc jeśli nie można zmienić rozmiaru widżetu, wówczas minHeight i minWidth określą stały rozmiar widżetu.

6. android: updatePeriodMillis

AppWidgetProviderInfo jest także miejscem, w którym określasz, jak często widżet powinien żądać nowych informacji.

Najmniejszy obsługiwany interwał aktualizacji to raz na 1800000 milisekund (30 minut). Nawet jeśli zadeklarujesz krótszy interwał aktualizacji, Twój widget będzie aktualizował się tylko raz na pół godziny.

Chociaż możesz chcieć wyświetlić najnowsze informacje tak szybko, jak to możliwe, system Wola obudź urządzenie do spania, aby pobrać nowe informacje. Częste aktualizacje mogą przepalić baterię urządzenia, szczególnie w okresach, gdy urządzenie pozostaje bezczynne przez dłuższy czas, na przykład przez noc. Zapewnienie jak najlepszej jakości obsługi oznacza zachowanie równowagi między ograniczeniem zużycia baterii i dostarczaniem nowych informacji w rozsądnych ramach czasowych.

Należy również wziąć pod uwagę rodzaj treści wyświetlanych przez widżet.

Należy również wziąć pod uwagę rodzaj treści wyświetlanych przez widżety dla Androida. Na przykład widżet pogodowy może pobierać zaktualizowaną prognozę tylko raz dziennie, natomiast aplikacja wyświetlająca najświeższe informacje będzie musiała aktualizować się częściej.

Aby znaleźć tę idealną równowagę, konieczne może być przetestowanie widgetu w zakresie częstotliwości aktualizacji i zmierzenie wpływu na żywotność baterii oraz aktualność zawartości widgetu. Jeśli masz chętną grupę testerów, możesz nawet skonfigurować testy A / B, aby sprawdzić, czy niektóre częstotliwości aktualizacji są odbierane bardziej pozytywnie niż inne.

Przeczytaj także: AndroidManifest.xml wszystko, co musisz wiedzieć

Na koniec, po określeniu idealnego interwału aktualizacji, możesz użyć krótszego interwału podczas opracowywania i testowania aplikacji. Na przykład możesz użyć najkrótszej możliwej częstotliwości aktualizacji (android: updatePeriodMillis = ”1800000 ″), gdy testujesz, czy metoda onUpdate () Twojej aplikacji uruchamia się poprawnie, a następnie zmień tę wartość przed udostępnieniem aplikacji ogółowi użytkowników.

Ukończony AppWidgetProviderInfo

Gotowy plik collection_widget_info.xml powinien wyglądać mniej więcej tak:

Nie zagracaj ekranu głównego użytkownika!

Aby ekran główny nigdy nie był zaśmiecony, dodamy dopełnienie i marginesy do naszego widżetu. Jeśli twój projekt nie zawiera jeszcze pliku dimens.xml, musisz go utworzyć:

  • Kliknij z wciśniętym klawiszem Control folder wartości twojego projektu.
  • Wybierz Nowy> Plik zasobów wartości.
  • Nadaj temu plikowi nazwę dimens.
  • Kliknij OK.

Otwórz plik dimens.xml i zdefiniuj następujące wartości marginesów i dopełniania:

10dp 8dp

Wysyłanie danych do widżetu

Następnie musimy utworzyć usługę widgetów, która będzie odpowiedzialna za wysyłanie naszych danych kolekcji do widgetu.

Utwórz nową klasę Java (Nowa> Klasa Java) o nazwie WidgetService i dodaj następujące elementy:

import android.content.Intent; import android.widget.RemoteViewsService; WidgetService klasy publicznej rozszerza RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (Intent intent) {zwróć nowego DataProvider (this, intent); }}

Rejestrowanie widżetu w Manifeście

Teraz musimy wprowadzić zmiany w Manifeście naszego projektu.

Aby rozpocząć, otwórz Manifest i zarejestruj widget jako BroadcastReceiver. Musimy również dodać filtr zamiaru dla akcji android.appwidget.action.APPWIDGET_UPDATE:

Następnie musisz określić dostawcę widgetu aplikacji:

Na koniec musimy zadeklarować usługę, która wyśle ​​dane do naszego widgetu, którym w tym przypadku jest klasa WidgetService. Ta usługa wymaga pozwolenia android.permission.BIND_REMOTEVIEWS:

Przetestuj swój widget

Jeśli korzystałeś z tego samouczka, będziesz mieć teraz pełny widget kolekcji, który wyświetla zestaw danych na ekranie głównym użytkownika.

Jeśli był to rzeczywisty projekt na Androida, zwykle rozwijałbyś metody cyklu życia, szczególnie metodę onUpdate (), ale to wszystko, czego potrzebujemy, aby utworzyć widget, który możesz zainstalować i przetestować na swoim urządzeniu z Androidem:

  • Zainstaluj ten projekt na kompatybilnym smartfonie z Androidem, tablecie lub AVD (Android Virtual Device).
  • Naciśnij i przytrzymaj dowolną pustą sekcję ekranu głównego, a po wyświetleniu monitu wybierz Widżety; uruchamia to selektor widżetów.
  • Szybko przesuwaj palcem po widżecie, aż znajdziesz właśnie utworzony widżet aplikacji.
  • Naciśnij i przytrzymaj ten widget, aby dodać go do ekranu głównego.
  • Ponieważ jest to pierwsza instancja tego konkretnego widgetu, należy uruchomić metodę onEnabled (), a zobaczysz toast o nazwie „onEnabled”.
  • Zmień rozmiar widżetu. Jeśli ustawisz minimalny obsługiwany rozmiar, sprawdź, czy nie możesz zmniejszyć widżetu powyżej tej wartości.
  • Sprawdź, czy ListView przewija się zgodnie z oczekiwaniami.
  • Następnie powinieneś sprawdzić metodę onDisabled (), usuwając widżet. Naciśnij i przytrzymaj widżet, a następnie wybierz Usuń z ekranu głównego. Ponieważ jest to ostatnia instancja tego konkretnego widgetu, należy uruchomić metodę onDisabled (), a zobaczysz toast o nazwie „onDisabled”.

To wszystko, czego potrzebujesz, aby dostarczyć działający widget aplikacji na Androida, ale jest kilka dodatków, które często mogą poprawić wrażenia użytkownika. W poniższych sekcjach zachęcamy użytkowników do wybierania tego widżetu z Selektora widżetów, tworząc obraz podglądu, który najlepiej pokazuje widżet. Pokażę też, jak utworzyć w pełni konfigurowalny widget, dodając do projektu działanie konfiguracyjne.

Tworzenie obrazu podglądu widgetu Androida

Jeśli złapiesz urządzenie z Androidem i przeciągniesz palcem po narzędziu wyboru widżetów, zobaczysz, że każdy widżet jest reprezentowany przez obraz, który zwykle pokazuje, jak ten widget będzie wyglądał po skonfigurowaniu na ekranie głównym użytkownika.

Aby zachęcić użytkowników do wybrania widżetu, powinieneś udostępnić obraz podglądu, który wyróżnia wszystkie przydatne informacje i funkcje, które ma do zaoferowania widżet.

Możesz szybko i łatwo utworzyć obraz podglądu, korzystając z aplikacji Widget Preview zawartej w emulatorze Androida.

Pamiętaj, że podgląd widżetów nie jest uwzględniony w najnowszych obrazach systemu Android, więc musisz utworzyć AVD przy użyciu Nougat (API Level 25) lub wcześniejszego:

  • Zainstaluj aplikację na AVD z API 25 lub niższym.
  • Otwórz szufladę aplikacji AVD i uruchom aplikację Widget Preview.
  • Podgląd widżetu wyświetli listę wszystkich aplikacji, które są obecnie zainstalowane na tym AVD; wybierz aplikację z listy.

  • Twój widżet będzie teraz wyświetlany na pustym tle. Poświęć trochę czasu na zmianę rozmiaru i dostrajanie widżetu, aż pokaże to, co najlepsze.
  • Gdy będziesz zadowolony z wyglądu i treści widżetu, wybierz Zrób migawkę.

  • Aby odzyskać migawkę, wróć do Android Studio i wybierz Widok> Narzędzie Windows> Eksplorator plików urządzenia z paska narzędzi. Spowoduje to uruchomienie Eksploratora plików urządzenia Android Studio.
  • W Eksploratorze plików urządzenia przejdź do sdcard / Download. Obraz podglądu powinien zostać zapisany w następującym formacie: _ori_.png

  • Przeciągnij ten obraz z Android Studio i upuść go w łatwo dostępnym miejscu, na przykład na pulpicie.
  • Nadaj temu plikowi obrazowemu opisową nazwę.
  • Przeciągnij i upuść plik w folderze projektu.
  • Otwórz AppWidgetProviderInfo, która dla tego projektu to collection_widget_info.xml.
  • Znajdź linię Androida: previewImage = ”@ mipmap / ic_launcher” i zaktualizuj ją, aby odwoływała się do obrazu podglądu.

Twój widżet będzie teraz używać tego nowego zasobu obrazu jako obrazu podglądu:

  • Zainstaluj zaktualizowany projekt na fizycznym urządzeniu z Androidem lub AVD.
  • Naciśnij i przytrzymaj dowolną pustą sekcję ekranu głównego.
  • Stuknij Widżety, które uruchamiają Selektor widżetów.
  • Przewiń do widżetu; powinien teraz korzystać ze zaktualizowanego podglądu obrazu.

Konfigurowalne widżety: dodawanie działania konfiguracji

Aktywność konfiguracyjna uruchamia się automatycznie, gdy użytkownik umieści każdą instancję widgetu na ekranie głównym.

Istnieje kilka powodów, dla których możesz chcieć dodać działanie konfiguracyjne do swojego projektu.

Widżety zwykle zapewniają najlepszą obsługę, gdy zapewniają dostęp do informacji lub funkcji, które są najważniejsze dla danego użytkownika.

Po pierwsze, niektóre widżety wymagają wstępnej konfiguracji, na przykład widżet wyświetlający alerty o ruchu drogowym może wymagać podania adresu domowego użytkownika, miejsca jego pracy oraz czasu, w którym zazwyczaj dojeżdża do pracy. Bez możliwości wprowadzenia tych informacji Twój widget może być całkowicie bezużyteczny!

Ponadto widżety zwykle zapewniają najlepszą obsługę, gdy zapewniają dostęp do informacji lub funkcji, które są najważniejsze dla poszczególnych użytkowników. Dodając do projektu działanie konfiguracyjne, możesz dać użytkownikom swobodę wyboru i wyboru dokładnie co zawiera widżet.

Nawet stosunkowo proste dostosowania, takie jak zmiana tła lub czcionki widżetu, mogą mieć pozytywny wpływ na wrażenia użytkownika - w końcu nikt nie doceni widżetu, który wizualnie koliduje z resztą ekranu głównego!

Nikt nie doceni widżetu, który wizualnie koliduje z resztą ekranu głównego!

Czasami możesz mieć długą listę treści, które chcesz uwzględnić w widżecie, i starasz się zawęzić opcje. Aktywność konfiguracji może być sposobem na dobre wykorzystanie wszystkich pomysłów tworzenie zagracony, zagmatwany widget. Pamiętaj, że skonfigurowanie widżetu nie powinno być uciążliwe, więc jeśli wykonasz czynność związaną z konfiguracją, zalecamy ograniczenie się do trzech opcji konfiguracji.

Dodajmy czynność konfiguracyjną do naszego projektu!

Po pierwsze, nasze działanie konfiguracyjne wymaga układu, więc utwórz nowy plik zasobów układu o nazwie config_activity.xml.

Dodam następujące przyciski do tego układu:

  • Przycisk konfiguracji. W prawdziwym projekcie przycisk ten modyfikowałby w pewien sposób widget, na przykład dodając lub usuwając zawartość lub zmieniając częstotliwość aktualizacji widgetu. Aby ułatwić zachowanie naszego kodu, kliknięcie tego przycisku spowoduje wyświetlenie toastu Opcje konfiguracji.
  • Przycisk konfiguracji. Gdy użytkownik będzie zadowolony z konfiguracji widgetu, naciśnięcie tego przycisku spowoduje umieszczenie nowo skonfigurowanego widgetu na ekranie głównym.

Oto mój kompletny plik config_activity.xml:

Utwórz działanie konfiguracji

Teraz musimy utworzyć nasze działanie konfiguracyjne.

Aby rozpocząć, utwórz nową klasę Java o nazwie ConfigActivity. W tym działaniu odzyskamy identyfikator widżetu aplikacji z intencji, która uruchomiła działanie konfiguracji. Jeśli ta intencja nie ma identyfikatora widżetu, musimy wywołać metodę finish ():

Intent intent = getIntent (); Pakiet dodatków = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

Następnie musimy utworzyć zamiar powrotu, przekazać oryginalny appWidgetId i ustawić wyniki z działania konfiguracji:

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

Jeśli podasz czynność konfiguracyjną, transmisja ACTION_APPWIDGET_UPDATE nie zostanie wysłana automatycznie po uruchomieniu czynności konfiguracyjnej, co oznacza metodę onUpdate () przyzwyczajenie być wywoływanym, gdy użytkownik utworzy instancję widgetu.

Aby upewnić się, że widget został utworzony z aktualnymi informacjami i zawartością, należy wykonać czynność konfiguracyjną musi uruchom pierwsze żądanie onUpdate ().

Oto zakończona konfiguracja:

import android.app.Activity; import android.appwidget.AppWidgetManager; import android.os.Bundle; import android.widget.Button; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; klasa publiczna ConfigActivity rozszerza działanie {@Override chronione void onCreate (pakiet saveInstanceState) {super.onCreate (saveInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); Przycisk setupWidget = (przycisk) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (nowy OnClickListener () {@Override public void onClick (View v) {handleSetupWidget ();}}); Przycisk configButton = (Przycisk) findViewById (R.id.configButton); configButton.setOnClickListener (nowy OnClickListener () {@Override public void onClick (View v) {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, „Opcje konfiguracji”, Toast.LENGTH_LONG) .show (); } int appWidgetId; private void showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; Intent intent = getIntent (); Pakiet dodatków = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); } // DO ZROBIENIA: Wykonaj konfigurację // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); koniec(); }}}

Po utworzeniu działania konfiguracyjnego musisz zadeklarować to działanie w Manifeście i określić, że akceptuje ono akcję APPWIDGET_CONFIGURE:

Wreszcie, ponieważ działanie konfiguracyjne jest przywoływane poza zakresem pakietu, musimy zadeklarować to działanie w naszym AppWidgetProviderInfo, którym w tym przypadku jest plik collection_widget_info.xml:

android: configure = "com.jessicathornsby.collectionwidget.ConfigActivity">

Testowanie twojego projektu

Czas przetestować gotowy projekt:

  • Zainstaluj zaktualizowany projekt na fizycznym urządzeniu z Androidem lub AVD.
  • Usuń wszystkie poprzednie wystąpienia widżetu, aby mieć pewność, że korzystasz z najnowszej wersji.
  • Naciśnij i przytrzymaj dowolny pusty obszar ekranu głównego i po wyświetleniu monitu wybierz Widżety.
  • Znajdź swój widżet w Próbniku widżetów i naciśnij długo, aby go wybrać.
  • Upuść widżet na ekranie głównym. Aktywność konfiguracyjna powinna zostać uruchomiona automatycznie.
  • Kliknij przycisk Wykonaj konfigurację, a wyświetli się toast Opcji konfiguracji, potwierdzający pomyślne zarejestrowanie tej interakcji.
  • Wyobraź sobie, że poprawiłeś ustawienia widżetu i jesteś teraz gotowy do umieszczenia go na ekranie głównym; dotknij przycisk Utwórz widget, a ten widget powinien zostać utworzony pomyślnie.

Możesz pobrać gotowy projekt widżetu kolekcji z GitHub.

Podsumowując

W tym artykule utworzyliśmy przewijalny widget kolekcji, który wyświetla zestaw danych na ekranie głównym użytkownika.

Jeśli chcesz kontynuować pracę z tym projektem, możesz spróbować dodać własny kod do metody onUpdate (), aby utworzyć widget, który aktualizuje się o nowe informacje w odstępie czasu określonym w pliku AppWidgetProviderInfo (collection_widget_info).

Jeśli utworzysz widżet na Androida, pamiętaj o udostępnieniu swoich dzieł w komentarzach poniżej!

Wydanie Androida 10 wprowadza wiele nowych funkcji i ulepzeń do mobilnego ytemu operacyjnego Google, ale być może najbardziej kontroweryjnymi nowościami ą funkcje terowania getami, które całkowic...

Wzycy mamy wewnętrznego maniaka. Potężne mikrokopy mogły zotać wynalezione do celów badawczych, ale w rzeczywitości ą otateczne narzędzie zapokajające ciekawość....

Pamiętaj