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.
Aby aktywować Asystenta, naciśnij i przytrzymaj przycisk ekranu głównego lub powiedz kluczowe wyrażenie. 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 wykorzystują interfejs Assist API na Androidzie, aby ulepszać Asystenta 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).
 
  Rysunek 1. Przykład interakcji z Asystentem z funkcją Now on Tap na aplikacja Google
Użytkownicy mogą skonfigurować asystenta, wybierając Ustawienia > Aplikacje > Aplikacje domyślne > Pomóż 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.
 
  Rysunek 2. Pomoc i ustawienia rozpoznawania mowy
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 opisano, jak podać dodatkowe informacje aby pomóc w ulepszaniu obsługi Asystenta, a także w tworzeniu scenariuszy które wymagają specjalnej obsługi, np. widoków niestandardowych.
Udostępnianie dodatkowych informacji z Asystentem
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.
 
  Rysunek 3. Diagram sekwencji cyklu życia wspomagającego interfejs API
  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
  Twoja aplikacja może implementować interfejs onProvideAssistContent()
  , by poprawić wrażenia użytkownika Asystenta, dostarczając odnośniki związane z treścią
  powiązane 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:  w przypadku aplikacji korzystających z implementacji niestandardowego zaznaczenia tekstu prawdopodobnie konieczne będzie
  w celu zaimplementowania onProvideAssistContent()
  i zadzwoń pod numer setClipData().
Implementacja domyślna
  Jeśli ani onProvideAssistData(), ani onProvideAssistContent()
  wywołanie zwrotne, system kontynuuje kontynuację i przekazuje
  automatycznie zbierają informacje asystentowi, chyba że bieżący
  jest 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.
- W przypadku widoków niestandardowych wypełnij pole AccessibilityNodeInfo.
- Marka
  sprawdź, czy niestandardowe obiekty ViewGroupudostępniać swoje dzieci.
Wykluczanie wyświetleń przez asystentów
  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.
Zastosowania kolejności elementów
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.
 
  Rysunek 4. Kolejność warstw (Z) warstwy wspomagającej
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. Dla: na przykład aplikacja Asystent Google korzysta z precyzyjnych linków i linków aplikacji, aby: kierować ruch do aplikacji docelowych.
Wdrażanie własnego Asystenta
  Możesz wdrożyć własnego asystenta. Jak to widać na rysunku
  2, użytkownik może wybrać aktywną aplikację asystującą. 
  aplikacja asystująca musi udostępniać implementację VoiceInteractionSessionService i VoiceInteractionSession, jak pokazano w 
  VoiceInteraction i przykład. 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().
