Aby ułatwić i szybciej korzystać z innych aplikacji, używaj celów bezpośredniego udostępniania aby udostępniać swojej aplikacji adresy URL, obrazy lub inne dane. Bezpośrednie udostępnianie działa prezentując kontakty z komunikatorów i aplikacji społecznościowych bezpośrednio na Androidzie arkusz udostępniania, dzięki któremu użytkownicy nie muszą wybierać aplikacji i wyszukiwać kontakt;
ShortcutManagerCompat
to interfejs API AndroidaX, który udostępnia skróty do udostępniania
zgodne z wycofanym interfejsem ChooserTargetService
API. Jest to preferowana metoda publikowania skrótów do udostępniania i ChooserTargets
. Instrukcje:
Więcej informacji znajdziesz w sekcji Korzystanie z AndroidaX do obsługi skrótów udostępniania oraz wyboru celów.
na tej stronie.
Publikowanie celów udostępniania bezpośredniego
Wiersz bezpośredniego udostępniania w arkuszu udostępniania zawiera tylko dynamiczne skróty udostępniane przez Udostępnianie Skróty API. Aby opublikować cele udostępniania bezpośredniego:
W pliku zasobu XML aplikacji zadeklaruj elementy
share-target
.<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Podczas inicjowania aplikacji użyj
setDynamicShortcuts
aby uporządkować skróty dynamiczne według ważności.Niższy indeks oznacza większą ważność. Jeśli tworzysz aplikację do komunikacji, mogą to być najczęściej prowadzone rozmowy uporządkowane według daty, w jakiej pojawiają się w aplikacji. Nie publikuj nieaktualnych skrótów. Rozmowa, w której nie było aktywności użytkownika w ciągu ostatnich 30 dni, jest uważana za nieaktualną.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Jeśli tworzysz aplikację do komunikacji, zgłoś użycie skrótów w
pushDynamicShortcut
natychmiast za każdym razem, gdy użytkownik odbiera lub wysyła wiadomość do kontaktu. Zobacz Raport o użyciu skrótów dla aplikacji do komunikacji na tej stronie. Na przykład zgłoś użycie wiadomości wysyłanych przez użytkownika przez określ powiązania możliwości w skrócie za pomocąShortcutInfoCompat.Builder#addCapabilityBinding
z funkcjąactions.intent.SEND_MESSAGE
.Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Jeśli użytkownik usunie kontakt, użyj funkcji
removeLongLivedShortcut
To jest preferowane sposób usunięcia skrótu niezależnie od tego, czy jest on zapisany w pamięci podręcznej usług Google. Fragment kodu poniżej pokazuje przykładowy, jak to zrobić.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Poprawianie pozycji docelowych w ramach funkcji bezpośredniego udostępniania
Arkusz udostępniania Androida pokazuje stałą liczbę celów bezpośredniego udostępniania. Te są sortowane według pozycji. Aby poprawić pozycję swoich skrótów:
- Upewnij się, że wszystkie elementy
shortcutIds
są unikalne i nigdy nie były używane w różnych środowiskach docelowych. - Aby mieć pewność, że skrót będzie długotrwały, wywołaj go, używając polecenia
setLongLived(true)
. - W przypadku skrótów związanych z rozmowami możesz zgłaszać korzystanie z nich w przypadku wiadomości wychodzących i przychodzących, ponownie publikując odpowiednie skróty za pomocą
ShortcutManagerCompat.pushDynamicShortcut
. Zobacz Zgłaszanie skrótów do aplikacji do komunikacji na tej stronie . - Unikaj podawania nietrafnych lub nieaktualnych celów bezpośredniego udziału, np. Kontakty, z którymi użytkownik nie wysłał wiadomości w ciągu ostatnich 30 dni.
- W przypadku aplikacji do obsługi SMS-ów unikaj podawania skrótów do krótkich kodów lub rozmów. zidentyfikowanych jako potencjalny spam. Użytkownicy z dużym prawdopodobieństwem udostępnią dane tych rozmów.
- Wywołaj
setCategories()
, aby powiązać skrót z odpowiedniemimeType
. Przykład: w aplikacji do obsługi SMS-ów – jeśli kontakt nie obsługuje czatów RCS lub MMS-ów, kojarzyć odpowiedni skrót z typami MIME nietekstowymi, takimi jakimage/*
ivideo/*
. - Po przekazaniu dynamicznego skrótu i zastosowaniu w danej rozmowie nie zmieniaj identyfikatora skrótu. Zapewnia to przechowywanie danych o użytkowaniu na potrzeby rankingu.
Jeśli użytkownik kliknie cel bezpośredniego udostępniania, aplikacja musi przenieść go do interfejsu, w którym mogą wykonać działanie bezpośrednio na obiekcie, na który są kierowane. Nie prezentuj użytkownik zobaczy interfejs ujednoznacznienia i nie umieszczaj go w interfejsie niepowiązanym z kliknij cel. Na przykład w aplikacji do obsługi wiadomości kliknięcie elementu docelowego udostępniania bezpośredniego powoduje wyświetlenie rozmowy z wybraną osobą. Klawiatura jest widoczna, a wiadomość jest wstępnie wypełniona udostępnionymi danymi.
Interfejs Share Shortcuts API
Począwszy od Androida 10 (poziom interfejsu API 29):
ShortcutInfo.Builder
dodane metody i ulepszenia
które zawierają dodatkowe informacje o docelowym udziale:
setCategories()
- Począwszy od Androida 10 kategorie są też używane do filtrowania skrótów, które mogą obsługiwać intencje lub działania udostępniania. Przeczytaj sekcję Deklarowanie udostępnienia . To pole jest wymagane w przypadku skrótów do wykorzystania jako wartości docelowych udostępniania.
setLongLived()
Określa, czy skrót jest prawidłowy, gdy został wycofany lub uczyniony niewidocznym przez aplikację (jako skrót dynamiczny lub przypięty). Jeśli skrót może być przechowywana w pamięci podręcznej przez różne usługi systemowe, nawet jeśli została cofnięta jako skrót dynamiczny.
Długotrwałe zastosowanie skrótu może poprawić jego pozycję w rankingu. Zobacz najlepsze tytuły ranking, by dowiedzieć się więcej.
setShortLabel()
,setLongLabel()
Przy publikowaniu skrótu dla pojedynczej osoby podaj pełne imię i nazwisko w języku
setLongLabel()
oraz dowolną krótką nazwę, np. pseudonim lub imię w języku:setShortLabel()
.
Zapoznaj się z przykładem publikowania skrótów udostępniania w GitHubzie.
Dodaj zdjęcia skrótu
Aby utworzyć skrót do udostępniania, musisz dodać obraz za pomocą usługi setIcon()
.
Skróty udostępniania mogą wyświetlać się na platformach systemowych i mogą zmieniać ich kształt.
Oprócz tego niektóre urządzenia z Androidem w wersji 7, 8 lub 9 (poziom interfejsu API 25,
26, 27 i 28) mogą wyświetlać ikony z bitmapą bez tła, co
znacząco zmniejsza kontrast. Aby mieć pewność, że skrót będzie wyglądał tak, jak chcesz, prześlij bitmapę adaptacyjną za pomocą IconCompat.createWithAdaptiveBitmap()
.
Upewnij się, że adaptacyjne mapy bitowe są zgodne z wytycznymi i wymiarami ustawionymi dla ikon adaptacyjnych. Najczęstszym sposobem osiągnięcia tego celu jest skalowanie odpowiedniej mapy bitowej do 72 x 72 dp i środek na przezroczystym obszarze 108 x 108 dp. Jeśli ikona zawiera przezroczyste obszary, musisz dodać kolor tła; w przeciwnym razie, przezroczyste obszary są czarne.
Nie przesyłaj obrazów zamaskowanych do określonego kształtu. Na przykład przed Androidem 10 (poziom interfejsu API 29) często udostępniano użytkownikom awatary w ramach funkcji Direct ShareChooserTarget
, które były zamaskowane w krąg. Arkusz udostępniania Androida i inne
na platformach systemowych w Androidzie 10 są teraz dostępne w formie zdjęć skrótów do kształtów i motywów.
Preferowana metoda udostępniania skrótów, przez
ShortcutManagerCompat
automatycznie kształtuj obiekty backcompat Bezpośrednie udostępnianie ChooserTarget
kręgów dla Ciebie.
Deklarowanie celu udostępnienia
Cele udostępniania muszą być zadeklarowane w pliku zasobów aplikacji, podobnie jak w przypadku statycznych definicji skrótów. Dodaj udostępnienie
definicje docelowe w elemencie głównym <shortcuts>
w pliku zasobów,
wraz z innymi statycznymi definicjami skrótów. Każdy element <share-targets>
zawiera informacje o typie udostępnianych danych, kategorii dopasowania oraz
klasa docelowa, która będzie obsługiwać intencję udostępniania. Kod XML wygląda mniej więcej tak:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Element danych w celu udziału jest podobny do specyfikacji danych w filtrze intencji. Każdy obiekt udostępniania może mieć kilka kategorii, które są używane tylko do dopasowywania opublikowanych skrótów aplikacji do definicji obiektów udostępniania. Kategorie mogą mieć dowolne wartości zdefiniowane przez aplikację.
Jeśli użytkownik wybierze skrót do udostępniania w arkuszu udostępniania Androida, do powyższego przykładowego udziału w wartościach docelowych, aplikacja otrzyma następujące dane: zamiar udostępnienia:
Action: Intent.ACTION_SEND ComponentName: {com.example.android.sharingshortcuts / com.example.android.sharingshortcuts.SendMessageActivity} Data: Uri to the shared content EXTRA_SHORTCUT_ID: <ID of the selected shortcut>
Jeśli użytkownik otworzy cel udostępniania za pomocą skrótów Menu z aplikacjami,
intencja utworzona podczas dodawania skrótu do udostępniania
Skrót ManagerCompat.
Ponieważ jest to inna intencja, Intent.EXTRA_SHORTCUT_ID
nie będzie dostępny. Jeśli go potrzebujesz, musisz go przekazać ręcznie.
Zgłaszanie użycia skrótów w aplikacjach do komunikacji
Jeśli tworzysz aplikację do komunikacji, możesz poprawić swoją pozycję w
Arkusz udostępniania na Androidzie obejmujący raportowanie wykorzystania wiadomości wychodzących i przychodzących.
Aby to zrobić, ponownie opublikuj skrót rozmowy reprezentujący kontakt za pomocą
ShortcutManagerCompat.pushDynamicShortcut
Użycie skrótu i wiązania z możliwościami są zgodne z Androidem 5.0 (interfejs API 21).
Zgłaszanie użycia skrótów do wiadomości wychodzących
Raportowanie wykorzystania wiadomości wysłanych przez użytkownika jest funkcjonalnie podobne do kliknięcia przycisku „wyślij” po utworzeniu wiadomości.
Aby aktywować raportowanie wykorzystania, określ powiązania możliwości w skrócie
do ShortcutInfoCompat.Builder#addCapabilityBinding
z funkcją actions.intent.SEND_MESSAGE
.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Jeśli wiadomość wychodząca jest przeznaczona na czat grupowy, musisz też dodać Audience
jako recipient
jest powiązany z możliwością.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Zgłaszanie użycia skrótów do wiadomości przychodzących
Aby aktywować raportowanie użytkowania, gdy użytkownik otrzyma wiadomość, taką jak SMS:
wiadomości czatu, e-maila lub powiadomień, należy dodatkowo określić możliwość
w skrócie przez
ShortcutInfoCompat.Builder#addCapabilityBinding
z
funkcję actions.intent.RECEIVE_MESSAGE
.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Jeśli przychodząca wiadomość pochodzi z czatu grupowego, musisz też dodać wartość parametru Audience
, ponieważ typ sender
jest powiązany z tą funkcją.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Korzystaj z AndroidaX, aby udostępniać skróty udostępniania i cele wyboru
Aby można było korzystać z biblioteki zgodności z AndroidemX, plik manifestu aplikacji
musi zawierać zestaw meta-data selectr-target-service i intent-filters. Zapoznaj się z aktualnym interfejsem ChooserTargetService
Direct Share API.
Ta usługa jest już zadeklarowana w bibliotece zgodności, więc użytkownik to robi nie muszą deklarować usługi w pliku manifestu aplikacji. Natomiast link z aktywność udostępniania w usłudze musi być uwzględniona jako cel wyboru dostawcy usług.
W poniższym przykładzie implementacja ChooserTargetService
to
androidx.core.content.pm.ChooserTargetServiceCompat
, która jest już zdefiniowany
W Androidzie X:
<activity android:name=".SendMessageActivity" android:label="@string/app_name" android:theme="@style/SharingShortcutsDialogTheme"> <!-- This activity can respond to Intents of type SEND --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <!-- Only needed if you import the sharetarget AndroidX library that provides backwards compatibility with the old DirectShare API. The activity that receives the Sharing Shortcut intent needs to be taken into account with this chooser target provider. --> <meta-data android:name="android.service.chooser.chooser_target_service" android:value="androidx.sharetarget.ChooserTargetServiceCompat" /> </activity>
Najczęstsze pytania na temat udostępniania skrótów
Jak są przechowywane dane o korzystaniu ze skrótów i czy użytkownik opuszcza urządzenie?
Skróty są w całości zapisywane na urządzeniu w systemowym katalogu danych w zaszyfrowanej partycji dysku. informacje w skrótach, takie jak ikona, intencja, a nazwiska i nazwiska osób oraz zasobów są dostępne tylko dla usług systemowych, ta sama aplikacja, która publikuje skróty.
Jaka jest historia bezpośredniego udostępniania?
Wprowadziliśmy bezpośrednie udostępnianie w Androidzie 6.0 (poziom interfejsu API 23), aby umożliwić aplikacjom:
dostarcza obiekty ChooserTarget
za pomocą ChooserTargetService
. Wyniki były pobierane w reakcji na żądanie, co powodowało długi czas wczytywania wartości docelowych.
W Androidzie 10 (poziom interfejsu API 29) zastąpiliśmy kartę ChooserTargetService
Direct
Udostępniaj interfejsy API nowemu interfejsowi Provisioning Shortcuts API. Zamiast pobierania wyników w reakcji na żądanie interfejs API skrótów udostępniania pozwala aplikacjom publikować cele udostępniania bezpośredniego z wyprzedzeniem. To szybko przyspieszyło proces pobierania bezpośredniego udostępniania.
podczas przygotowywania arkusza ShareSheet. Bezpośrednie udostępnianie ChooserTargetService
będzie nadal działać, ale system będzie klasyfikować cele podane
wartość niższą niż w przypadku jakiegokolwiek celu, który korzysta z interfejsu Share Shortcuts API.
Android 11 (poziom interfejsu API 30) wycofał usługę ChooserTargetService
,
Udostępnianie skrótów API to jedyny sposób określania celów bezpośredniego udostępniania.
Czym opublikowane skróty do celów udostępniania różnią się od programu uruchamiającego skrótów (typowe korzystanie ze skrótów po długim naciśnięciu ikon aplikacji program uruchamiający)?
Wszystkie skróty opublikowane dla „celu współdzielenia” jest również programem uruchamiającym i będzie widoczny w menu po przytrzymaniu ikony aplikacji. maksymalna liczba skrótów na działanie dotyczy również łącznej liczby skróty publikowane przez aplikację (udostępnianie celów i starszych skrótów programu uruchamiającego; łącznie).
Jaką liczbę skrótów do udostępniania należy opublikować?
Liczba skrótów udostępniania jest ograniczona do tego samego limitu dynamicznych
skróty dostępne przez
getMaxShortcutCountPerActivity(android.content.Context)
Można publikować
do tego limitu, ale należy pamiętać, że skróty udostępniania mogą być widoczne
w Menu z aplikacjami i przytrzymaj go, a także w arkuszu udostępniania. Większość programów uruchamiających aplikacje jest włączona
przytrzymanie może wyświetlić maksymalnie 4 lub 5 skrótów w trybie pionowym;
8 w trybie poziomym. Zobacz to
Najczęstsze pytania
, gdzie znajdziesz więcej informacji i wskazówek na temat udostępniania skrótów.