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