Android 6.0 Marshmallow wprowadza nowy sposób korzystania z aplikacji przy pomocy Asystenta takich jak Google . Asystent to okno najwyższego poziomu, które użytkownicy mogą wyświetlić, aby uzyskać kontekst odpowiednie działania w odniesieniu do bieżącej aktywności. Te działania mogą obejmować precyzyjne linki do innych aplikacji na urządzenia.
Użytkownicy aktywują asystenta przez przytrzymanie przycisku ekranu głównego lub wypowiedzenie frazy kluczowej. W odpowiedzi system otwiera okno najwyższego poziomu, które wyświetla kontekst odpowiednich działań.
Aplikacja asystująca, np. Asystent Google, implementuje okno nakładki Asystenta za pomocą o nazwie Now on Tap, która działa z funkcjami Androida na poziomie platformy. System pozwala użytkownikowi wybrać aplikację asystującą, która uzyskuje z aplikacji informacje kontekstowe za pomocą Interfejs Assist API Androida.
Z tego przewodnika dowiesz się, jak aplikacje na Androida korzystają z interfejsu API Asystenta, aby poprawić wrażenia użytkowników. Aby dowiedzieć się, jak utworzyć aplikację do multimediów, która umożliwi Asystentowi uruchamianie i kontrolę znajdziesz w artykule na temat aplikacji Asystent Google i aplikacje do multimediów.
Korzystanie z Asystenta
Rysunek 1 przedstawia typową interakcję użytkownika z asystentem. Gdy użytkownik naciśnie i przytrzyma przycisk Home, wywołania zwrotne Assist API są wywoływane. w aplikacji source (krok 1). Asystent renderuje okno nakładki (kroki 2 i 3), a potem wybiera działanie, które ma wykonać. Asystent wykonuje wybrane działanie, np. uruchomienie intencji z precyzyjnym linkiem do (docelowej) aplikacji restauracyjnej (krok 4).
Użytkownicy mogą skonfigurować asystenta, wybierając Ustawienia > Aplikacje > Aplikacje domyślne > Pomoc i głosowe wprowadzanie tekstu. Użytkownicy mogą zmieniać opcje systemu, takie jak dostęp wyświetlać zawartość ekranu w formie tekstu i otwierać zrzut ekranu, jak pokazano na Rys. 2.
Aplikacja źródłowa
Aby mieć pewność, że aplikacja będzie działać z Asystentem jako źródłem informacji dla użytkownika: potrzebujesz tylko ułatwień dostępu „najlepsze” . W tej sekcji znajdziesz informacje o tym, jak udostępniać dodatkowe informacje, które pomogą poprawić wrażenia użytkowników asystenta, oraz o scenariuszach wymagających specjalnego postępowania, takich jak widoki niestandardowe.
Udostępnianie dodatkowych informacji asystentowi
Oprócz tekstu i zrzutu ekranu aplikacja może udostępniać z pomocą Asystenta. Na przykład Twoja muzyka Aplikacja może przekazać informacje o obecnym albumie, tak by Asystent mógł sugerowanie bardziej inteligentnych działań dostosowanych do bieżącej aktywności. Pamiętaj, że interfejsy Assist API nie zapewniają elementów sterujących multimediami. Aby dodać opcje sterowania multimediami, zobacz Asystent Google i aplikacje do multimediów.
Aby przekazać dodatkowe informacje asystentowi, aplikacja udostępnia: globalnego kontekstu aplikacji, rejestrując detektor aplikacji, dostarcza informacje związane z aktywnością za pomocą wywołań zwrotnych aktywności, jak pokazano tutaj: Rysunek 3.
Aby zapewnić globalny kontekst aplikacji, aplikacja tworzy implementację
Application.OnProvideAssistDataListener
i rejestruje go
za pomocą: registerOnProvideAssistDataListener()
.
Aby podać informacje kontekstowe związane z konkretnym działaniem,
zastępuje onProvideAssistData()
i onProvideAssistContent()
.
Dwie metody działania są wywoływane po opcjonalnej globalnej
wywołanie zwrotne. Ponieważ wywołania zwrotne są wykonywane w wątku głównym, powinny
natychmiast.
Wywołania zwrotne są wywoływane tylko wtedy, gdy działanie jest uruchomione.
Dostarczanie kontekstu
Gdy użytkownik aktywuje asystenta,
Funkcja onProvideAssistData()
jest wywoływana, aby utworzyć pełne
ACTION_ASSIST
Zamiar z całym kontekstem
bieżąca aplikacja reprezentowana jako instancja instancji AssistStructure
. Możesz zastąpić tę metodę, aby umieścić
które chcesz dodać do pakietu.
EXTRA_ASSIST_CONTEXT
należy do intencji wspomagającej.
Opisywanie treści
Aplikacja może implementować onProvideAssistContent()
, aby poprawić wrażenia użytkownika asystenta, podając odniesienia do treści związanych z bieżącą aktywnością. Zawartość aplikacji możesz opisać za pomocą
typowy słownik zdefiniowany przez Schema.org
za pomocą obiektu JSON-LD. W przykładzie poniżej aplikacja muzyczna zapewnia
uporządkowane dane opisujące album muzyczny, którego obecnie używa użytkownik
wyświetlanie:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
Możesz też poprawić wrażenia użytkowników za pomocą niestandardowych implementacji
onProvideAssistContent()
,
co może zapewnić:
- Dostosowuje przesłane treści zamiar, aby lepiej odzwierciedlają kontekst działania na najwyższym poziomie.
- Podaje identyfikator URI wyświetlanych treści.
- Uzupełnia
setClipData()
o dodatkowe interesującej treści, którą aktualnie przegląda użytkownik.
Uwaga: aplikacje, które korzystają z niestandardowej implementacji wyboru tekstu, prawdopodobnie muszą zaimplementować metodę onProvideAssistContent()
i wywoływać metodę setClipData()
.
Implementacja domyślna
Jeśli nie zostanie zaimplementowany ani onProvideAssistData()
, ani onProvideAssistContent()
, system nadal będzie działać i przekazywać automatycznie zebrane informacje do asystenta, chyba że bieżące okno zostanie oznaczone jako bezpieczne.
Jak widać na Rysunku 3, system używa domyślnych implementacji interfejsów onProvideStructure()
i onProvideVirtualStructure()
do
zbierać tekst i wyświetlać informacje o hierarchii. Jeśli w widoku zaimplementowano niestandardowy
rysunek tekstowy, zastąp onProvideStructure()
, aby podać
asystentowi z tekstem wyświetlanym użytkownikowi przez wywołanie metody setText(CharSequence)
.
W większości przypadków wdrożenie ułatwień dostępu w celu uzyskania potrzebnych informacji. Aby wdrożyć obsługę ułatwień dostępu, przestrzegać sprawdzonych metod opisanych w artykule Tworzenie aplikacji ułatwienia dostępu, czyli:
- Podaj atrybuty
android:contentDescription
. - Wypełnij pole
AccessibilityNodeInfo
w przypadku widoków niestandardowych. - Marka
sprawdź, czy niestandardowe obiekty
ViewGroup
udostępniać swoje dzieci.
Wykluczanie wyświetleń z urządzeń z Asystentem
Aby obsługiwać informacje poufne, aplikacja może wykluczyć z asystenta bieżący widok
ustawiając parametr układu FLAG_SECURE
dla WindowManager
. Musisz ustawić wartość FLAG_SECURE
bezpośrednio dla
w każdym oknie utworzonym w ramach aktywności, w tym także z oknami. Aplikacja może też używać tych funkcji:
setSecure()
do wykluczenia
z poziomu Asystenta. Brak
globalny (na poziomie aplikacji), aby wykluczyć wszystkie wyświetlenia z Asystenta. Notatka
że FLAG_SECURE
nie powoduje zatrzymania wywołań interfejsu Assist API.
. Działanie używające pola FLAG_SECURE
może nadal bezpośrednio
podać informacje aplikacji Asystenta za pomocą wywołań zwrotnych opisanych wcześniej
w tym przewodniku.
Uwaga: w przypadku kont służbowych (Android for Work):
administrator może wyłączyć
zbieranie danych Asystenta na potrzeby profilu służbowego przy użyciu metody setScreenCaptureDisabled()
interfejsu DevicePolicyManager
API.
Interakcje głosowe
Wywołania zwrotne interfejsu API wspomagania są również wywoływane podczas kluczowe wyrażenie . Więcej informacji: Głos Actions.
Uwagi dotyczące kolejności nakładania
Asystent używa lekkiego okna nakładanego wyświetlanego nad bieżącej aktywności. Można je aktywować w każdej chwili, nie twórz na stałe alertów systemowych, które zakłócają działanie okna nakładki, Rysunek 4.
Jeśli Twoja aplikacja używa z alertami systemowymi, należy je niezwłocznie usuwać, ponieważ pogarsza komfort obsługi.
Aplikacja docelowa
Aplikacje Asystenta zwykle korzystają z precyzyjnych linków, aby znajdować aplikacje docelowe. Aby ustawić może być potencjalną aplikacją docelową, rozważ dodanie obsługi precyzyjnych linków. Pasujące wyniki między bieżącym kontekstem użytkownika a precyzyjnymi linkami lub innymi potencjalnymi działaniami wyświetlanymi okno nakładki (widoczne w kroku 3 na Rys. 1) jest związane z implementacją Asystenta Google. Na przykład aplikacja Asystent Google korzysta z precyzyjnych linków i usługi App Links, aby kierować użytkowników do aplikacji docelowych.
Wdrażanie własnego Asystenta
Możesz zaimplementować własnego asystenta. Jak widać na rys. 2, użytkownik może wybrać aktywną aplikację asystenta. Aplikacja asystenta musi zapewniać implementację VoiceInteractionSessionService
i VoiceInteractionSession
, jak pokazano na VoiceInteraction
. Wymaga też uprawnień BIND_VOICE_INTERACTION
. Asystent może wtedy
otrzyma hierarchię widoków i tekstu reprezentowaną jako wystąpienie AssistStructure
w onHandleAssist()
.
Zrzut ekranu otrzymuje za pomocą usługi onHandleScreenshot()
.