Выберите любой файл вида через намерение на Android


Я хотел бы запустить 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 file manager, он также ответит на это намерение. Мои клиенты-только владельцы Galaxy SII, и я не хочу заставлять их устанавливать Astro file manager, учитывая, что у них уже есть базовый, но достаточный файловый менеджер.

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

5 71

5 ответов:

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

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

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);

Samsung file explorer нуждается не только в пользовательском действии ( com.сек.андроид.приложение.myfiles.PICK_DATA), но и категория часть (умысел.CATEGORY_DEFAULT) и mime-тип должен быть передан как дополнительный.

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

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

public void openFile(String minmeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(minmeType);
        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", minmeType); 
        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();
        }
    }

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

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

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

вот вам путь в onActivityResult деятельности.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}

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

действие " com.сек.андроид.приложение.myfiles.PICK_DATA"

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

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

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

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