W jaki sposób aplikacje na Androida implementują przycisk udostępniania?

11

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.

Jack Maddington
źródło
1
Czy naprawdę miałeś na myśli „kupy”, czy jest to literówka dla „popów”? Przynajmniej w amerykańskim języku angielskim pierwsze to, co dzieci robią z pieluchami.
JDługosz
Masz rację. Niedawno przełączyłem się na klawiaturę Swype na Androidzie, która pozwala mi pisać szybciej, ale czasami wpisuje niewłaściwe słowo i nie zauważam. Nie jestem jeszcze pewien, co z tym zrobić, nie jestem bardzo ostrożną osobą. Czasami w sub i nie może nawet prawidłowo zobaczyć ekranu.
Jack Maddington
W łodzi podwodnej? Co należy zrobić: korekta przed przesłaniem. I nie zanieczyszczaj swojej listy prognoz zawstydzającymi słowami.
JDługosz
Przypadkowo moja lista przewidywań jest wypełniona materiałami ze starych e-maili, które Swype czyta automatycznie. Yikes!
Jack Maddington

Odpowiedzi:

10

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.

Dan Hulme
źródło
Ale widziałem, że aplikacje wyświetlają kilka różnych okien dialogowych selektora. Czy wszystkie są naprawdę wyświetlane przez system operacyjny, czy też sama aplikacja może uzyskać listę celów?
user1686
@grawity Wbudowane okno dialogowe ma pewne opcje dostosowywania (np. do ustawienia tytułu), ale aplikacja może również poprosić Androida o listę celów udostępniania i umieścić je we własnym oknie dialogowym. Mój wybór przeglądarki BURLy jest tego przykładem, ale z intencją „otwartego adresu URL” zamiast intencji „wyślij”.
Dan Hulme
11

Nie jestem deweloperem, więc mogę jedynie podać surowe wyjaśnienie: aplikacje deklarują w swoich ManifestMimetypach, które rozumieją i chętnie odpowiadają na akcje udostępniania. W tym celu definiują tak zwane „filtry intencyjne”, np .:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="message/*" />
    <data android:mimeType="multipart/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

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:

Izzy
źródło
1
To prawie wszystko bezpośrednio. Sama aplikacja (udostępniająca) może filtrować niektóre z zamierzonych respondentów, ale większość nie.
coteyr
2
@HiltonShumway właśnie dlatego głosowałem za jego odpowiedzią. Poza mną Dan jest sprawny rozwojowo i wie znacznie lepiej, jak wszystko idzie razem. Kiedy więc opublikowałem odpowiedź, miałem nadzieję, że też ją opublikuje - nie zawiódł mojej nadziei :)
Izzy