2016-04-24 2 views
0

Мое приложение создает кучу изображений, и я хочу открыть папку с помощью приложения галереи пользователя, чтобы пользователь мог смотреть, печатать, делиться ими или делать то, что ему нравится ,Как открыть галерею постоянных телефонов с помощью кода в папке

Стандартное решение:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
Uri uri = Uri.parse(folder); 
intent.setDataAndType(uri,"*/*"); 
startActivity(Intent.createChooser(intent, "Open folder")); 

Открывает папку в галерее телефона, но если нажать на изображение, Galery, закрывается вместо отображения изображения и остаться в живых.

Моего самым близким решение

Intent gallery = new Intent(Intent.ACTION_MAIN, null); 
gallery.addCategory(Intent.CATEGORY_APP_GALLERY); 
Intent chooser = Intent.createChooser(gallery, "Gallery"); 
startActivity(chooser); 

Открывает полное взорваны телефоны галерея приложения со всеми его возможностями, но только на его корневой папке.

Как открыть всплывающее приложение галереи в определенной папке, чтобы оно не закрывалось при выборе изображения? Хорошим бонусом будет возможность открывать фотографии в галерее, как если бы пользователь уже активировал слайд-шоу.

+0

«Как открыть всплывающее приложение галереи в определенной папке, чтобы оно не закрывалось при выборе изображения?» - Скорее всего, вы этого не делаете. Существуют тысячи моделей устройств Android, которые поставляются с сотнями «галерейных приложений», а также сотни «галерейных приложений», доступных в Play Store и в других местах. Нет «спросить приложение галереи, чтобы пользователь мог просмотреть папку« Intent », и даже если бы не было, нет гарантии, что есть приложение, которое чтит это« Intent »на устройстве пользователя. – CommonsWare

+0

на окнах, вы должны написать: explorer.exe «путь». В Linux вы должны написать caja «path» или nautilus «path». В общем случае «appname» «path». Нет ли эквивалента в Andoid для прохождения по пути? – Kenobi

ответ

1

на окнах, вы должны написать: explorer.exe "path". На Linux вы должны написать caja «path» или nautilus «path»

Я вполне уверен, что ни одно из них не открывает приложение галереи. Конечно, nautilus <path> не делает, и explore.exe <path> не в последний раз пробовал это на Windows (правда, давным-давно).

Кроме того, «Linux» необязательно имеет nautilus или caja. Совершенно невозможно установить Linux без них. У большинства серверов нет ни одного; моя установка Ubuntu на этом ноутбуке не имеет caja. Некоторые дистрибутивы Linux могут иметь что-то другое, чтобы служить этой роли (например, то, что использует xfce). Итак, здесь мы имеем случай, когда у нас есть операционная система (Linux), которая по-разному переупаковывается с различными возможностями. Никто с каким-либо чувством не предположил бы, что каждый Окружение Linux имеет nautilus или caja.

Нет ли эквивалента в Andoid для прохождения по пути?

TL; DR: Правильно, нет эквивалента, особенно для каталога.

Во-первых, так как Linux не требует наличия nautilus или caja, для устройства Android не требуется иметь приложение галереи, файловый проводник и т. Д. Только те вещи, которые являются частью основной ОС в значительной степени гарантированы. Поэтому Android-дистрибутивы от производителей устройств ведут себя так же, как их дистрибутивы Linux.

Во-вторых, Android всегда был на полпути к современной модели «перестать думать о файлах и папках». Это особенно актуально для папок, потому что для каталога нет типа MIME (перехват file/* не всегда согласован).

В-третьих, в то время как существует много стандартных структур Intent, «просмотр содержимого каталога» среди них отсутствует.

Итак:

  • Ваш ACTION_GET_CONTENT подход не гарантирует работу, даже как вы видите его, как и ACTION_GET_CONTENT does not take a Uri. Кроме того, ACTION_GET_CONTENT позволяет пользователю выбрать часть контента, а те действия, которые его реализуют, могут выбрать интерфейс, который отражает это.

  • ACTION_MAIN для «входной двери» приложения. Как правило, он используется с CATEGORY_LAUNCHER для значка запуска стартового экрана. И, как the documentation states, it does not take a Uri or any other form of input.

  • ACTION_PICK сродни ACTION_GET_CONTENT, но в качестве параметра он принимает значение Uri. Если вы используете image/* как тип MIME, вы можете найти некоторую активность, которая может позволить пользователю выбрать изображение из этого каталога. Однако, как и в случае с ACTION_GET_CONTENT, пользовательский интерфейс может быть наклонен в сторону, позволяя пользователю что-то выбрать. И нет требования, чтобы устройство имело приложение с активностью ACTION_PICK для схемы file: и любого типа MIME, не говоря уже о image/*.

  • ACTION_VIEW как вы просите разрешить пользователю просматривать какой-либо контент. Однако это не идеально подходит для каталогов, потому что не существует согласованного MIME-типа. Однако я не удивлюсь, если некоторые файловые менеджеры поддерживают подход file/*. В то же время для каждого Android-устройства не требуется наличие такого файлового менеджера или любого другого приложения, которое обрабатывает эту структуру Intent.

+0

Спасибо за исчерпывающий ответ. Как насчет компромисса: можно ли проверить доступность активности, которая может обрабатывать файл/*, а затем начать эту операцию; иначе запустите резервное решение (например, ваш собственный небольшой файловый менеджер)? – Kenobi

+0

@ Kenobi: Да. Создайте 'Intent', который вы передадите' createChooser() '. Затем поставьте «Intent» на 'resolveActivity()' на 'PackageManager'. Если вы вернете 'null' из' resolveActivity() ', для обработки запроса нет никакой активности, и вы можете реализовать некоторый резерв. Если вы получаете значение, отличное от 'null', есть 1+ действия, и вы можете продолжить работу' createChooser() '. – CommonsWare

Смежные вопросы