Выберите любой вид файла через Intent на Android - PullRequest
82 голосов
/ 20 января 2012

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

В настоящее время я использую (который я скопировал из исходного кода электронной почты Android для вложения файла)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

Но на моем Galaxy S2 отображаются только «Галерея» и «Музыкальный проигрыватель».На этом устройстве есть файловый менеджер, и я бы хотел, чтобы он появился в списке.Я также хотел бы, чтобы приложение камеры отображалось в списке, чтобы пользователь мог сделать снимок и отправить его через мое приложение.Если я установлю файловый менеджер Astro, он тоже будет реагировать на это.Мои клиенты - только владельцы Galaxy SII, и я не хочу заставлять их устанавливать файловый менеджер Astro, поскольку у них уже есть базовый, но достаточный файловый менеджер.

Есть идеи, как мне этого добиться?Я почти уверен, что в таком меню уже появился файловый менеджер по умолчанию для выбора файла, но я не могу вспомнить, в каком приложении.

Ответы [ 5 ]

76 голосов
/ 20 января 2012

Не для камеры, а для других файлов ..

В моем устройстве установлено ES File Explorer, и в моем случае это просто работает.

44 голосов
/ 30 июля 2013

Проводнику Samsung требуется не только настраиваемое действие ( com.sec.android.app.myfiles.PICK_DATA ), но и часть категории (Intent. CATEGORY_DEFAULT ) и тип mime.должны быть переданы как дополнительные.

Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

Вы также можете использовать это действие для открытия нескольких файлов: com.sec.android.app.myfiles.PICK_DATA_MULTIPLE В любом случае, вот мое решение, которое работает на Samsung и других устройствах:

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        // special intent for Samsung file manager
        Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
         // if you want any file type, you can skip next line 
        sIntent.putExtra("CONTENT_TYPE", mimeType); 
        sIntent.addCategory(Intent.CATEGORY_DEFAULT);

        Intent chooserIntent;
        if (getPackageManager().resolveActivity(sIntent, 0) != null){
            // it is device with Samsung file manager
            chooserIntent = Intent.createChooser(sIntent, "Open file");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
        } else {
            chooserIntent = Intent.createChooser(intent, "Open file");
        }

        try {
            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
        }
    }

Это решение хорошо работает для меня, и, возможно, будет полезно для кого-то еще.

37 голосов
/ 25 июня 2012

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

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

здесь можно найти путь в onActivityResult активности.

1 голос
/ 23 января 2012

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

Действие "com.sec.android.app.myfiles.PICK_DATA"

Я создал пользовательский Выбор активности, который отображает действия, фильтрующие оба намерения.

0 голосов
/ 03 апреля 2014

Если вы хотите это знать, то существует библиотека с открытым исходным кодом, называемая aFileDialog , которая является небольшой и простой в использовании и предоставляет средство выбора файлов.

Разница с другими библиотеками для выбора файлов для Android состоит в том, что aFileDialog дает вам возможность открыть инструмент выбора файлов как диалог и как действие.

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

...