- Sharing Content between Android apps
- Sharing text
- Sharing HTML text
- Receiving text
- Sharing files and images
- Receiving files
- The Support Library is your friend
- 10 лучших потоковых приложений DLNA для Android
- 1. VLC
- 2. Плекс
- 3. LocalCast
- 4. Коди
- 5. Привет-Fi Cast + DLNA
- 6. MediaMonkey
- 7. BubbleUPnP
- 8. MediaHouse UPnP / DLNA Browser
- 9. iMediaShare Personal
- 10. AllCast
- Заключение
Sharing Content between Android apps
Sharing is caring, as they say, but sharing on Android means something perhaps slightly different. ‘Sharing’ is really shorthand for sending content such as text, formatted text, files, or images between apps.
So if ‘sharing’ == sending content, it makes slightly more sense that it is implemented using ACTION_SEND (or ACTION_SEND_MULTIPLE) Intents and its dozen extras.
While that approach is perfectly valid, I prefer to use ShareCompat, a set of classes in the v4 Support Library designed to make it easy to build intents for sharing content.
Sharing text
Sharing plain text is, as you might imagine, a good place to start. In fact, there’s not a whole lot to it:
ShareCompat.IntentBuilder uses a fluent API where you can chain together multiple method calls, using only the ones you need. For sharing, one of the most important parts is picking the right mime type — this is how apps filter what type of content they can receive. By using text/plain, we signify that our Intent will only contain plain text. Then, of course, setText() is how we actually add the CharSequence to the Intent to send. And while you can certainly send styled text using setText(), there’s no guarantee that the receiving app will honor that styling, so you should ensure that the text is legible with or without styling.
You’ll note we then use resolveActivity() before calling startActivity(). As mentioned in Protecting Implicit Intents with Runtime Checks, this is critical to prevent an ActivityNotFoundException when there is no Activity available to handle the mime type you have selected. While probably not as much of a concern with text/plain, it may be much more common with other types.
Note: when you use startActivity(shareIntent), that respects any default apps the user has set (i.e., if they’ve previously selected sharing all “text/plain” items to a certain app). If you’d like to instead always show a disambiguation chooser, use the intent generated from IntentBuilder.createChooserIntent() as explained in the ACTION_CHOOSER documentation.
Sharing HTML text
Some apps, most notably email clients, also support formatting with HTML. The changes, compared to plain text, are fairly minor:
The differences here are that we use of setHtmlText() in place of setText() and a mime type of text/html replacing text/plain. Here ShareCompat actually does a little bit extra: setHtmlText() also uses Html.fromHtml() to create a fallback formatted text to pass along to the receiving app if you haven’t previously called setText() yourself.
Given that many of the apps that can receive HTML text are email clients, there’s a number of helper methods to set the subject, to:, cc:, and bcc: email addresses as well — consider adding at least a subject to any share intent for best compatibility with email apps.
Of course, you’ll still want to call resolveActivity() just as before — nothing changes there.
Receiving text
While the focus so far has been on the sending side, it is helpful to know exactly what is happening on the other side (if not just to build a simple receiving app to install on your emulator for testing purposes). Receiving Activities add an intent filter to the Activity:
The action is obviously the more critical part — without that there’s nothing that would denote this as an ACTION_SEND (the action behind sharing). The mime type, same as with our sending code, is also present here. What isn’t as obvious are the two categories. From the element documentation:
Note: In order to receive implicit intents, you must include the CATEGORY_DEFAULT category in the intent filter. The methods startActivity() and startActivityForResult() treat all intents as if they declared the CATEGORY_DEFAULT category. If you do not declare it in your intent filter, no implicit intents will resolve to your activity.
So CATEGORY_DEFAULT is required for our use case. Then, CATEGORY_BROWSABLE allows web pages to natively share into apps without any extra effort required on the receiving side.
And to actually extract the information from the Intent, the useful ShareCompat.IntentReader can be used:
Similar to IntentBuilder, IntentReader is just a simple wrapper that make it easy to extract information.
Sharing files and images
While sending and receiving text is straightforward enough (create text, include it in Intent), sending files (and particularly images — the most common type by far) has an additional wrinkle: file permissions.
The simplest code you might try might look like
And that almost works — the tricky part is in getting a Uri to the File that other apps can actually read, particularly when it comes to Android 6.0 Marshmallow devices and runtime permissions (which include the now dangerous READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions).
My plea: don’t use Uri.fromFile(). It forces receiving apps to have the READ_EXTERNAL_STORAGE permission, won’t work at all if you are trying to share across users, and prior to KitKat, would require your app to have WRITE_EXTERNAL_STORAGE. And really important share targets, like Gmail, won’t have the READ_EXTERNAL_STORAGE permission — so it’ll just fail.
Instead, you can use URI permissions to grant other apps access to specific Uris. While URI permissions don’t work on file:// URIs as is generated by Uri.fromFile(), they do work on Uris associated with Content Providers. Rather than implement your own just for this, you can and should use FileProvider as explained in the File Sharing Training.
Once you have it set up, our code becomes:
Using FileProvider.getUriForFile(), you’ll get a Uri actually suitable for sending to another app — they’ll be able to read it without any storage permissions — instead, you are specifically granting them read permission with FLAG_GRANT_READ_URI_PERMISSION.
Note: we don’t call setType() anywhere when building our ShareCompat (even though in the video I did set it). As explained in the setDataAndType() Javadoc, the type is automatically inferred from the data URI using getContentResolver().getType(uriToImage). Since FileProvider returns the correct mime type automatically, we don’t need to manually specify a mime type at all.
If you’re interested in learning more about avoiding the storage permission, consider watching my Forget the Storage Permission talk or at least go through the slides, which covers this topic in depth at 14:55 (slide 11).
Receiving files
Receiving files isn’t too different from text because you’re still going to use ShareCompat.IntentReader. For example, to make a Bitmap out of an incoming file, it would look like:
Of course, you’re free to do whatever you want with the InputStream — watch out for images that are so large you hit an OutOfMemoryException. All of the things you know about loading Bitmaps still apply.
The Support Library is your friend
With both ShareCompat (and its IntentBuilder and IntentReader) and FileProvider in the v4 Support Library, you’ll be able to include sharing text, HTML text, and files in your app with the best practices by default.
Источник
10 лучших потоковых приложений DLNA для Android
DLNA – это удобное прозвище для чего-то более пугающего – Digital Living Network Alliance. Однако он не слишком страшен, позволяя подключать DLNA-совместимые устройства друг к другу и беспрепятственно передавать данные между ними по беспроводной сети – фотографии, видео, домашний экран Android, и все, как вы его называете.
Это довольно старый формат, но он все еще крепок, что подтверждается тем фактом, что и Microsoft, и Sony пытались исключить его из своих Xbox One и PS4 соответственно, но в итоге оба добавили его обратно из-за широкого спроса. Да здравствует DLNA!
Мы проанализировали все хорошее и плохое потоковых приложений DLNA и сократили их до лучших. Так что прокрутите вниз и выберите.
1. VLC
Вездесущий медиаплеер имеет тенденцию появляться в областях, которые мы не ассоциируем с ним естественным образом.
Например, VLC это не только отличный видеопроигрыватель, но и отличный приемник DLNA, позволяющий легко просматривать файлы, хранящиеся на локальном медиа-сервере, и воспроизводить их. Оттуда вы можете использовать функцию потоковой передачи VLC для передачи вашего контента прямо в Chromecast или другие потоковые устройства.
Приложение имеет простой и понятный интерфейс и неизмеримо эволюционировало с момента выхода бета-версии несколько лет назад. Несмотря на то, что VLC не так известен на Android, как на ПК, он остается лучшим вариантом.
2. Плекс
Plex является одним из лучших приложений для потоковой передачи мультимедиа на сегодняшний день. Его интерфейсы элегантны, он загружает все виды метаданных для ваших медиа, чтобы они выглядели гладкими и профессиональными, он потрясающий по всему. Кроме того, Plex также может быть активирован для работы в качестве сервера DLNA (Настройки -> Сервер -> DLNA), так что вы можете подключить его по беспроводной связи ко всем домашним устройствам, сертифицированным по DLNA, и предоставить им интерфейс, которого они заслуживают – будь то на вашем планшете Android или Android TV.
Plex поставляется со всеми лучшими функциями потоковой передачи мультимедиа, такими как общие списки воспроизведения между устройствами, возобновление видео на разных устройствах Plex, использование устройства Android в качестве пульта дистанционного управления Plex TV и многое другое. Мы не можем рекомендовать это достаточно.
3. LocalCast
Одно из наиболее популярных потоковых приложений в нашем списке, локального вещани взаимодействует с устройствами DLNA, UPnP и даже Samba для потоковой передачи контента с телефона по всему дому. Если у вас есть Chromecast, LocalCast позволяет вращать и масштабировать изображения на лету, а также он интегрирован с Opensubtitles.org, позволяя быстро загружать субтитры для фильмов и т. Д. Во время просмотра.
LocalCast работает с популярными устройствами, такими как Chromecast, Amazon Fire TV, игровые приставки и все крупные бренды Smart TV. Как правило, он обеспечивает более качественную потоковую передачу видео, чем даже собственные приложения Google, такие как Google Photos, имеет собственный веб-браузер, который вы можете транслировать, и может транслировать из сетевого хранилища в вашем доме, что делает его превосходным и простым в использовании. пакет.
4. Коди
Ни одна статья о потоковых приложениях не может избежать упоминания самого известного (или печально известного?) Одного из них. Коди это медиацентр, который не предназначен исключительно для потоковой передачи данных DLNA (это больше для родительской технологии DLNA, UPnP), но вы можете настроить его таким образом, если хотите.
Самым большим преимуществом Kodi для пользователей Android является то, что он полон дополнений, от официальных, таких как YouTube и основные спортивные каналы, в хранилища, которые дают вам доступ к каналам по всему миру. Естественно, это отлично подходит для потоковой передачи локально хранящихся мультимедиа.
Kodi специализируется на видео, и его пользовательский интерфейс адаптирован к этому, но вы также можете использовать его для просмотра изображений и прослушивания радио. Если вы ищете для потоковой передачи музыки, то есть лучшие варианты.
5. Привет-Fi Cast + DLNA
Hi-Fi Cast + DLNA Он предназначен для музыки и поддерживает воспроизведение наиболее распространенных форматов музыкальных файлов – MP3, AAC, FLAC, WAV – на устройствах Google Home, а также на других устройствах, поддерживающих потоковую передачу DLNA.
Вы можете настроить все виды воспроизведения в случайном порядке для своей музыки, будь то отдельные дорожки, исполнители или альбомы, и вы можете воспроизводить музыку с вашего устройства Android или других устройств DLNA, содержащих музыку. Если вы просто хотите слушать музыку, то это ваш лучший выбор.
6. MediaMonkey
MediaMonkey делает намного больше, чем DLNA, позволяя синхронизировать и передавать мультимедиа на несколько устройств через WiFi, UPnP, Bluetooth и, конечно, DLNA. Что выделяет ее, так это аккуратный интерфейс и множество инструментов управления мультимедиа для поддержания вашей библиотеки организованными – управление списками воспроизведения, редактированием нескольких файлов и закладками, и это лишь некоторые из них.
Вам нужно будет заплатить за дополнительные функции, такие как неограниченное использование DLNA, но стоит потратить несколько долларов за одно из самых полных потоковых приложений, которое стоит того, чтобы его увидеть.
7. BubbleUPnP
BubbleUPnP UPnP / DLNA позволяет транслировать ваш контент прямо с вашего устройства на совместимое устройство DLNA. Он поддерживает Chromecast, любой телевизор с поддержкой DLNA и игровые приставки последнего поколения. Помимо базовой потоковой передачи, он также имеет такие функции, как очередь воспроизведения, редактируемые списки воспроизведения, скробблинг, таймер отключения и различные режимы воспроизведения в случайном порядке. Он имеет полноэкранный просмотрщик изображений и функцию дистанционного управления.
Лучше всего, это ничего не стоит!
8. MediaHouse UPnP / DLNA Browser
Если вы хотите иметь приложения с множеством функций, проверьте MediaHouse UPnP / DLNA Browser, Он имеет ряд потоковых функций DLNA, которые помогут вам транслировать видео и музыку так, как вы хотите. Например, он автоматически сканирует вашу WiFi-сеть, чтобы определить, есть ли какие-либо устройства с поддержкой DLNA, чтобы вы могли подключиться к ним. Он делит отсканированные устройства на две категории: первая – это устройства, на которые вы можете передавать свой контент, а вторая – устройства, с которых вы можете передавать контент. Он поддерживает создание списков воспроизведения для ваших музыкальных файлов, имеет средство просмотра изображений и работает в ландшафтном режиме.
9. iMediaShare Personal
Если вы хотите приложение DLNA с потрясающим интерфейсом, дайте iMediaShare Personal попытка Приложение позволяет передавать потоковое цифровое мультимедиа прямо с устройства Android на большой телевизор без использования каких-либо кабелей. Пока ваши медиафайлы воспроизводятся на вашем телевизоре, приложение действует как пульт для управления ими. Это позволяет вам управлять воспроизведением, таким как пауза, следующий и т. Д., Используя жесты рук.
10. AllCast
Хотя все приложения, перечисленные до этого момента, передают контент на любое устройство, AllCast предлагает наибольшую совместимость. Он может передавать мультимедиа в Chromecast, Amazon Fire TV, Apple Телевизор, Xbox 360 и Xbox One, PS4 и другие устройства с поддержкой DLNA. Он также позволяет вам транслировать из вашего Dropbox, позволяя вам напрямую транслировать контент без необходимости сначала загружать его.
Заключение
Зачем использовать старые некачественные жесткие диски, когда вы можете делать так много замечательных вещей по беспроводной сети? Настройка для потоковой передачи DLNA может показаться сложной, поскольку в ней используется аббревиатура для длинного и сложного технического термина, но это действительно довольно просто. Все вышеперечисленные приложения великолепны, поэтому вам просто нужно найти, какое из них лучше всего вам подходит, а затем следовать простым инструкциям на экране, чтобы сделать шаг ближе к созданию беспроводного медиацентра.
Эта статья была впервые опубликована в ноябре 2014 года и обновлена в сентябре 2019 года.
Источник