Zastanawiałem się, jak aplikacje na Androida i Android implementują przycisk udostępniania i mechanizm udostępniania. Na przykład, kiedy nacisnę przycisk udostępniania na YouTube, wyskakuje lista aplikacji, które można udostępnić. Jak określa się tę listę? Czy jest jakaś konkretna intencja „udostępnij”, a następnie pojawiają się wszystkie spoty, które mogą dzielić typ intencji przewidziany w dodatkach intencji? Jaka jest nazwa techniczna wzorca projektowego zastosowanego do tego celu? Dzięki.
share-menu
intents
Jack Maddington
źródło
źródło
Odpowiedzi:
Składają się na to dwie części: mechanizm komunikacji między aplikacjami i możliwość udostępniania rzeczy oraz mechanizm udostępniania treści przez aplikacje. Zajmę się nimi pojedynczo, ale najpierw krótką notatką o zamiarach .
Zamiary
Zamiar w Androidzie jest to, co służy do uruchamiania aplikacji. Może działać jak skrót lub jak skojarzenie pliku Windows. Zamiarem może być nazwa aplikacji, która ma zostać uruchomiona, ale nie musi. Może także określać akcję do wykonania (np. „Otwórz główną działalność”, „wyświetl ten adres URL”, „utwórz pozycję kalendarza”) oraz typ MIME obiektu, na którym będzie działać (np. Rzecz, którą chcesz wyświetlić ma typ image / jpeg). Niektóre nazwy działań są specyficzne dla konkretnej aplikacji, ale wiele z nich jest ustandaryzowanych przez Androida, aby umożliwić interakcję aplikacji.
Filtry zamiarów i aplikacja komunikacyjna
Każda aplikacja określa filtry zamiarów określające , jakie działania może wykonać. np. aplikacja do przeglądania obrazów zarejestrowałaby filtr zamiarów dla „wyświetl ten adres URL”, gdzie typ MIME to „image / *”; przeglądarka internetowa zarejestruje filtr zamiarów dla „wyświetl ten adres URL”, gdzie schemat URL to „http” lub „https”. Aby móc udostępniać różne rzeczy, aplikacja rejestruje filtr zamiarów dla zamiaru „wyślij” albo z określonego typu (np. Jeśli może udostępniać tylko zdjęcia), albo z dowolnego typu.
Aplikacja treści
Aplikacja, która chce udostępnić część treści, tworzy zamiar akcji „udostępnij” i adres URL wskazujący treść do udostępnienia. (Często jest to „tymczasowy” adres URL, który daje aplikacji odbierającej tymczasowy dostęp do pliku w prywatnej pamięci aplikacji treści lub do strumienia generowanego przez aplikację treści.) Nie określa nazwy aplikacji do obsługi zamiar. Potem, to daje, że zamiarem ramach Android Android i prosi, aby wyświetlić Wybieracza okno. Android porównuje zamiar z filtrami zamiarów ze wszystkich zainstalowanych aplikacji, tworzy listę i pokazuje ją użytkownikowi. Gdy użytkownik wybiera konkretną aplikację, system Android uruchamia tę aplikację i przekazuje jej zamiar. Aplikacja korzysta z adresu URL, aby pobrać treść z oryginalnej aplikacji.
Nowości w Marshmallow: Direct Share
W Marshmallow istnieje inny mechanizm o nazwie Direct Share . Uzupełnia to mechanizm zamiaru, dzięki czemu możesz wybrać osoby lub grupy do udostępniania bezpośrednio z okna dialogowego selektora, pomijając dodatkowy krok „do kogo chcesz wysłać”. Działa to nieco inaczej: aplikacja komunikacyjna musi świadczyć usługę. Gdy aplikacja z zawartością prosi o wybranie, Android uruchamia usługę dla każdej odpowiedniej aplikacji. Usługa zwraca listę odpowiednich celów udostępniania , a system Android łączy wszystkie te osobne listy w listę wyświetlaną w oknie dialogowym.
źródło
Nie jestem deweloperem, więc mogę jedynie podać surowe wyjaśnienie: aplikacje deklarują w swoich
Manifest
Mimetypach, które rozumieją i chętnie odpowiadają na akcje udostępniania. W tym celu definiują tak zwane „filtry intencyjne”, np .:Za każdym razem, gdy naciśniesz przycisk „udostępnij”, treść do udostępnienia jest oceniana i dopasowywana do aplikacji, które zadeklarowały chęć otrzymania formatu.
Źródła:
źródło