Android: Как открыть конкретную папку через Intent и показать ее содержимое в файловом браузере?
Я думал, что это будет легко, но, как оказалось, к сожалению это не так.
Что у меня:
У меня есть папка с именем myFolder на моем внешнем хранилище (не SD-карта, потому что это Nexus 4, но это не должно быть проблемой). Папка содержит несколько файлов *.csv
.
Что я хочу:
Я хочу написать метод, который делает следующее: Показать множество приложений (файловых браузеров), из которых я могу выбрать один (см. рисунок). После того, как я нажму на него, нужно запустить выбранный браузер файлов и показать мне содержимое "myFolder". Больше не меньше.
![enter image description here]()
Мой вопрос:
Как именно я это делаю? Я думаю, что я пришел довольно близко к следующему коду, но независимо от того, что я делаю, и я уверен, что должно быть что-то, чего я еще не получил, - он всегда открывает только основную папку из внешнего хранилища.
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);
}
Ответы
Ответ 1
Наконец-то я начал работать. Таким образом, выбирает только несколько приложений (Google Диск, Dropbox, Root Explorer и Solid Explorer). Он отлично работает с двумя исследователями, но не с Google Диском и Dropbox (я думаю, потому что они не могут получить доступ к внешнему хранилищу). Также возможен и другой тип MIME, например "*/*"
.
public void openFolder(){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()
+ File.separator + "myFolder" + File.separator);
intent.setDataAndType(uri, "text/csv");
startActivity(Intent.createChooser(intent, "Open folder"));
}
Ответ 2
Это должно работать:
Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + "/myFolder/");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, "resource/folder");
if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
startActivity(intent);
}
else
{
// if you reach this place, it means there is no any file
// explorer app installed on your device
}
Пожалуйста, убедитесь, что на вашем устройстве установлено приложение-проводник.
EDIT: добавлена рекомендация shantanu из комментария.
Ответ 3
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 "*/*", открывается встроенный файловый браузер, чтобы выбрать любой файл, если я установил "text/plain", откроется Dropbox. У меня установлен Dropbox, Google Диск. Если я удалю Dropbox, то "*/*" работает, чтобы открыть браузер файлов. Это Android 4.4.2. Я могу загрузить содержимое из Dropbox и для Google Диска с помощью getContentResolver(). OpenInputStream (data.getData()).
Ответ 4
Вы близки.
Я бы попытался установить URI следующим образом:
String folderPath = Environment.getExternalStorageDirectory()+"/pathTo/folder";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
Uri myUri = Uri.parse(folderPath);
intent.setDataAndType(myUri , "file/*");
startActivity(intent);
Но это не так сильно отличается от того, что вы пробовали.
Скажите нам, изменит ли он что-нибудь?
Также убедитесь, что целевая папка существует, и посмотрите на появившийся объект Uri, прежде чем отправить его в намерение, возможно, это не то, что мы ожидаем.
Ответ 5
этот код будет работать с файловым менеджером OI:
File root = new File(Environment.getExternalStorageDirectory().getPath()
+ "/myFolder/");
Uri uri = Uri.fromFile(root);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setData(uri);
startActivityForResult(intent, 1);
вы можете получить менеджер файлов OI здесь: http://www.openintents.org/en/filemanager
Ответ 6
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());
}
}
}
Ответ 7
File temp = File.createTempFile("preview", ".png" );
String fullfileName= temp.getAbsolutePath();
final String fileName = Uri.parse(fullfileName)
.getLastPathSegment();
final String filePath = fullfileName.
substring(0,fullfileName.lastIndexOf(File.separator));
Log.d("filePath", "filePath: " + filePath);
fullfileName:
/mnt/sdcard/Download_Manager_Farsi/preview.png
filePath:
/шоссе/SDCard/Download_Manager_Farsi