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

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

В настоящее время я использую (который я скопировал из исходного кода электронной почты 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 файловый менеджер, учитывая, что у них уже есть базовый, но достаточный файловый менеджер.

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

Ответ 1

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

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

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

Ответ 2

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

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();
        }
    }

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

Ответ 3

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

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);

}

Ответ 4

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

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

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

Ответ 5

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

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

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