2014-12-13 9 views
5

Jest całkiem jasne, w dokumentacji, które można wysłać wiele fragmentów danych z:Jak mogę wysłać wiele typów danych za pomocą Intent.ACTION_SEND_MULTIPLE podczas korzystania z shareIntent?

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); 
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); 
shareIntent.setType("image/*"); 
startActivity(Intent.createChooser(shareIntent, "Share images to..")); 

ale wydaje się, że z jednej linii: shareIntent.setType("image/*"); że wszystkie elementy muszą być tego samego typu danych. Co jeśli chciałbym wysłać zdjęcie (image/jpeg) i hashtag, który powinien pasować do napisu (tekst/zwykły)?

Jak obsługiwać wiele rodzajów treści w jednym wydaniu? Czy można wysłać 2 shareIntents do tej samej działalności? Jak sobie z tym poradzę?

Odpowiedz

7

Jeśli twoim celem jest dzielenie jednego obrazu z tekstem, jest to kod Proponuję:

String text = "Look at my awesome picture"; 
Uri pictureUri = Uri.parse("file://my_picture"); 
Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_TEXT, text); 
shareIntent.putExtra(Intent.EXTRA_STREAM, pictureUri); 
shareIntent.setType("image/*"); 
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
startActivity(Intent.createChooser(shareIntent, "Share images...")); 
+0

dlaczego więc właściwość shareIntent.setType nadal "image/*". Czy to działa, gdy wysyłam Intencję.EXTRA_TEXT? – BigBoy1337

+0

@ BigBoy1337 To zadziała. Najprostszym sposobem sprawdzenia, czy to działa, jest udostępnienie go w Gmailu. Zobaczysz tam tekst i załącznik (obrazek). –

+0

To działa, z wyjątkiem tylko niektórych aplikacji? podobnie jak zapis tekstowy jest dodawany tylko na instagramie i skrzynce odbiorczej Google, ale nie na Facebooku ani Twitterze. Jakieś pomysły, dlaczego? – BigBoy1337

7

To nie jest do końca jasne z pytaniem, czy chcesz wysłać wiele obrazów, czy tylko jeden obraz, ale z powiązanym tekstem.

W pierwszym przypadku (Wiele obrazów):

Stosować ACTION_SEND_MULTIPLE i dostarczyć listę URI jako EXTRA_STREAM, jak w:

Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); 
shareIntent.setType("image/*"); 

Jeśli jest to drugi przypadek (obraz oraz tekst):

Zastosowanie tylko ACTION_SEND i zapewniają zarównoEXTRA_STREAMiEXTRA_TEXT na e XAMPLE:

Intent shareIntent = new Intent(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_TEXT, text); 
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); 
shareIntent.setType("image/*"); 

Jeśli jednak trzeba dzielić strumienie różnych typów MIME (tak jak oba zdjęć i innych załączników) wystarczy użyć bardziej ogólny typ MIME, taki jak */*. Na przykład:

shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
shareIntent.setType("*/*"); 

Z dokumentacji ACTION_SEND_MULTIPLE kopalni (nacisk):

Wiele rodzajów są obsługiwane, a odbiornik powinien obsługiwać różne typy miarę możliwości. Odpowiednim sposobem sprawdzenia ich przez odbiorcę jest użycie przelicznika zawartości dla każdego identyfikatora URI. Nadawca powinien spróbować ustawić najbardziej konkretny typ mime w typie intencji, ale może on spaść z powrotem do <type>/* lub */* w razie potrzeby.

np. jeśli wysyłasz image/jpg i image/jpg typu zamiarem mogą być image/jpg, ale jeśli wysyłasz image/jpg i image/png, a następnie wpisz intencyjny powinien być image/*.

Działa to podczas mieszania, powiedzmy, obrazów i pobranych plików.

+0

Zamierzam wysłać 1 zdjęcie wraz z ciągiem tekstowym. Czy to znaczy, że powinienem używać shareIntent.setType ("image/*") lub shareIntent.setType ("*/*") – BigBoy1337

+1

@ BigBoy1337 '' image/* "' powinno być w porządku, jak w drugim przykładzie (chyba że wiesz dokładny typ obrazu, oczywiście). Chciałem tylko podkreślić, że dodanie 'EXTRA_TEXT' nie wymaga zmiany typu MIME. – matiash

+0

Witam ten problem w niektórych telefonach 'putParcelableArrayListExtra' nie działa zgodnie z oczekiwaniami. Zrobił pokaz slajdów i nie był w stanie wysyłać tekstu z obrazami – Saveen

Powiązane problemy