Я думал, что это будет легко, но как оказалось, к сожалению, это не.
Что я имею:
У меня есть папка, названная "myFolder" на моем внешнем устройстве хранения данных (не SD-карта, потому что это - Nexus 4, но это не должно быть проблемой). Папка содержит некоторых *.csv
файлы.
Что я хочу:
Я хочу записать метод, который делает следующее: Покажите множество приложений (файловые браузеры), от которых я могу выбрать один (см. изображение). После того, как я нажму на него, выбранный файловый браузер должен запустить и показать мне содержание "myFolder". Ни больше, ни меньше.
Мой вопрос:
Как точно я делаю это? Я думаю, что приехал, вполне соглашаются со следующим кодом, но независимо от того, что я делаю - и я уверен, что должно быть что-то, в чем я еще не разобрался - он всегда открывает только основную папку от внешнего устройства хранения данных.
public void openFolder()
{
File file = new File(Environment.getExternalStorageDirectory(),
"myFolder");
Log.d("path", file.toString());
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.fromFile(file), "*/*");
startActivity(intent);
}
Сегодня, необходимо представлять папку с помощью ее содержания: URI, столь же полученный из Платформы Обращения к памяти и открытия его, должен быть столь же простым как:
Intent i = new Intent(Intent.ACTION_VIEW, uri);
startActivity(i);
увы, приложение Файлов в настоящее время содержит ошибку, которая заставляет его отказывать, когда Вы пробуете это использование внешнего поставщика услуг по хранению данных. Папки от сторонних поставщиков однако могут быть отображены таким образом.
Intent chooser = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(Environment.getDownloadCacheDirectory().getPath().toString());
chooser.addCategory(Intent.CATEGORY_OPENABLE);
chooser.setDataAndType(uri, "*/*");
// startActivity(chooser);
try {
startActivityForResult(chooser, SELECT_FILE);
}
catch (android.content.ActivityNotFoundException ex)
{
Toast.makeText(this, "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}
В коде выше, если setDataAndType "*/*", встроенный файловый браузер открыт для выбора любого файла, если я установил "текст/плоскость", Dropbox открыт. У меня есть Dropbox, установленный Google Drive. Если я удаляю Dropbox только "*/*", работает для открытия файлового браузера. Это - Android 4.4.2. Я могу загрузить содержание с Dropbox и для Google Drive getContentResolver () .openInputStream (data.getData ()).
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/csv");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 0);
} catch (android.content.ActivityNotFoundException ex) {
ex.printStackTrace();
}
затем просто необходимо добавить ответ
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {
case 0: {
//what you want to do
//file = new File(uri.getPath());
}
}
}