Ekran główny Androida, dostępny na większości urządzeń z Androidem, umożliwia
widżety aplikacji (lub widżety) umieszczonych przez użytkowników dla
szybki dostęp do treści. Jeśli chcesz wymienić ekran główny lub
aplikacji, możesz też zezwolić użytkownikowi na umieszczanie widżetów, implementując
AppWidgetHost
To nie jest
jest wymagane dla większości aplikacji. Jeśli jednak tworzysz własny
ważne jest zrozumienie zobowiązań umownych, na które host domyślnie akceptuje zobowiązania umowne.
Na tej stronie omawiamy obowiązki związane z wdrażaniem niestandardowych
AppWidgetHost
Konkretny przykład implementacji obiektu AppWidgetHost
:
spójrz na kod źródłowy ekranu głównego Androida
LauncherAppWidgetHost
Oto przegląd najważniejszych klas i koncepcji związanych z implementacją
niestandardowy AppWidgetHost
:
Host widżetu aplikacji:
AppWidgetHost
udostępnia interakcję z Usługa AppWidget dla aplikacji osadzonych w interfejsie użytkownika.AppWidgetHost
musi mieć unikalny identyfikator w pakiecie hosta. Ten identyfikator pozostaje bez zmian w przypadku wszystkich sposobów korzystania z hosta. Identyfikator jest zwykle zakodowaną na stałe wartością, przypisać w aplikacji.Identyfikator widżetu aplikacji: każde wystąpienie widżetu ma w danym momencie przypisany unikalny identyfikator. nie jest wiążąca. Zobacz
bindAppWidgetIdIfAllowed()
Więcej szczegółów znajdziesz w dalszej sekcji Wiązania widżetów. host uzyskuje unikalny identyfikator za pomocąallocateAppWidgetId()
Ten identyfikator będzie widoczny przez cały okres aktywności widżetu, dopóki nie zostanie usunięty z hosta. Dowolny stan specyficzny dla hosta, taki jak rozmiar i lokalizacja widżet – musi być zachowywany przez pakiet hostingowy i powiązany z tagiem identyfikator widżetu aplikacji.Widok hosta widżetu aplikacji:
AppWidgetHostView
jako ramka aby widżet został zapakowany, gdy ma być wyświetlany. Widżet jest powiązane z wartościąAppWidgetHostView
za każdym razem, gdy widżet zostanie powiększony przez hosta.- Domyślnie system tworzy
AppWidgetHostView
, ale host może utworzy własną podklasęAppWidgetHostView
przez rozszerzenie. - Począwszy od Androida 12 (poziom interfejsu API 31),
AppWidgetHostView
wprowadzasetColorResources()
. orazresetColorResources()
obsługi kolorów przeładowanych dynamicznie. Gospodarzem jest odpowiedzialnym za uatrakcyjnianie tych metod.
- Domyślnie system tworzy
Pakiet opcji:
AppWidgetHost
używa pakietu opcji do: przekazują informacjeAppWidgetProvider
o sposobie wyświetlania widżetu – na przykład listę zakresów rozmiarów oraz informację, czy jest na ekranie blokady lub ekranie głównym. Dzięki tym informacjomAppWidgetProvider
dostosowuje zawartość i wygląd widżetu do gdzie jest wyświetlany. Za pomocąupdateAppWidgetOptions()
orazupdateAppWidgetSize()
aby zmodyfikować pakiet widżetów. Obie te metody wywołująonAppWidgetOptionsChanged()
oddzwanianie doAppWidgetProvider
.
Wiązania widżetów
Gdy użytkownik dodaje widżet do hosta, odbywa się proces nazywany powiązaniem. Powiązanie
Powiązanie konkretnego identyfikatora widżetu aplikacji z określonym hostem
AppWidgetProvider
.
Interfejsy API powiązań umożliwiają również hostowi udostępnienie niestandardowego interfejsu użytkownika
i powiązania. Aby można było korzystać z tego procesu, aplikacja musi zadeklarować parametr
BIND_APPWIDGET
uprawnienia w pliku manifestu hosta:
<uses-permission android:name="android.permission.BIND_APPWIDGET" />
To jednak dopiero pierwszy krok. W trakcie działania aplikacji użytkownik musi wprost przyznać
aplikacji, aby umożliwić jej dodanie widżetu do hosta. Aby sprawdzić, czy
ma uprawnienia do dodania widżetu, użyj
bindAppWidgetIdIfAllowed()
. Jeśli bindAppWidgetIdIfAllowed()
zwraca wartość false
, aplikacja musi wyświetlić
okno z prośbą o przyznanie uprawnień: „allow” (zezwalaj) dla bieżącego widżetu
add lub „zawsze zezwalaj” , aby uwzględnić wszystkie przyszłe dodatki do widżetów.
Ten fragment kodu pokazuje na przykład, jak wyświetlić to okno:
Kotlin
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName) // This is the options bundle described in the preceding section. putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options) } startActivityForResult(intent, REQUEST_BIND_APPWIDGET)
Java
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName); // This is the options bundle described in the preceding section. intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
Host musi sprawdzić, czy widżet dodany przez użytkownika wymaga konfiguracji. Dla: więcej informacji znajdziesz w artykule Umożliwianie użytkownikom konfigurowania aplikacji widżety.
Obowiązki organizatora
Możesz określić wiele ustawień konfiguracji widżetów, korzystając z
Metadane AppWidgetProviderInfo
.
Wszystkie te opcje konfiguracji znajdziesz szczegółowo w
kolejnych sekcji, od
AppWidgetProviderInfo
powiązany z dostawcą widżetu.
Niezależnie od docelowej wersji Androida wszystkie hosty mają parametr następujące obowiązki:
Podczas dodawania widżetu przydziel identyfikator widżetu w sposób opisany powyżej. Gdy widżet został usunięty z hosta, wywołaj
deleteAppWidgetId()
do alokacji identyfikatora widżetu.Podczas dodawania widżetu sprawdź, czy aktywność związana z konfiguracją musi być który został już wprowadzony. Zwykle host musi uruchomić konfigurację widżetu. jeśli istnieje i nie jest oznaczona jako opcjonalna przez określenie obu Flagi
configuration_optional
ireconfigurable
. Zobacz Aktualizowanie widżetu na podstawie aktywności związanej z konfiguracją . Jest to konieczne, zanim widżety zaczną się wyświetlać.Widżety określają domyślną szerokość i wysokość w
AppWidgetProviderInfo
metadanych. Te wartości są zdefiniowane w komórkach – poczynając od Android 12, jeślitargetCellWidth
itargetCellHeight
są – lub dps, jeśli określono tylkominWidth
iminHeight
. Zobacz Atrybuty rozmiaru widżetu.Dopilnuj, aby układ widżetu miał co najmniej taką liczbę dps. Dla: Na przykład wiele hostów wyrównuje ikony i widżety w siatce. W tym scenariuszu przez domyślnie host dodaje widżet z minimalną liczbą komórek, które spełniają warunki
minWidth
iminHeight
.
Oprócz wymagań wymienionych w poprzedniej sekcji musisz też wersje platformowe wprowadzają funkcje, które nakładają nowe obowiązki na hosta.
Określ podejście na podstawie docelowej wersji Androida
Android 12
Android 12 (poziom interfejsu API 31) obejmuje dodatkowy element List<SizeF>
zawierający listę
możliwych rozmiarów w dps, jakie wystąpienie widżetu może przyjąć w pakiecie opcji.
Podana liczba rozmiarów zależy od implementacji hosta. Zwykle gospodarze
na telefony komórkowe i w 4 rozmiarach – w orientacji pionowej i poziomej
urządzeń składanych.
Obowiązuje limit MAX_INIT_VIEW_COUNT
(16) liczby różnych
RemoteViews
, które może przesłać AppWidgetProvider
RemoteViews
Obiekty AppWidgetProvider
mapują obiekt RemoteViews
na każdy rozmiar w
List<SizeF>
, podaj maksymalnie MAX_INIT_VIEW_COUNT
rozmiary.
Android 12 to także
maxResizeWidth
oraz
maxResizeHeight
atrybutów w dps. Zalecamy, aby widżet używający co najmniej jednego z tych elementów
rozmiar nie przekracza wartości określonej przez atrybuty.
Dodatkowe materiały
- Więcej informacji znajdziesz w dokumentacji referencyjnej
Glance
.