Откройте файловый менеджер из приложения для Android.

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

Я пробовал что-то вроде:

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("*/*");
    shareIntent.putExtra(Intent.EXTRA_STREAM,
            Uri.fromFile(new File(filePath)));
    shareIntent.setPackage("my.package");
    startActivity(shareIntent);

Но я продолжаю получать ошибку:

E/AndroidRuntime (3591): android.content.ActivityNotFoundException: не найдена активность для обработки Intent {act=android.intent.action.SEND type=/ flg=0x1 pkg=my.package (имеет клип ) (есть дополнения) }

Каков правильный фильтр намерений, поскольку я подозреваю, что ACTION_SEND не является правильным.

Спасибо.


person Phantom    schedule 30.04.2015    source источник


Ответы (2)


Вы можете использовать Intent.ACTION_GET_CONTENT:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse("/whatever/path/you/want/"); // a directory
intent.setDataAndType(uri, "*/*");
startActivity(Intent.createChooser(intent, "Open folder"));
person shkschneider    schedule 30.04.2015
comment
Но как я могу начать с определенного пути к файлу? - person Phantom; 30.04.2015
comment
Спасибо за ответ, но он не перенаправляет на этот конкретный путь, он открывает расположение файлового менеджера по умолчанию. Кроме того, я бы хотел, чтобы он открывал приложение диспетчера файлов, а не всплывающее окно внутри приложения. - person Phantom; 30.04.2015
comment
Тогда мне жаль сообщать, что нет стандартного/общего способа сделать это. Все файловые менеджеры на Android имеют свои спецификации намерений, и я знаю, что это беспорядок. Но вы не можете AFAIK. - person shkschneider; 30.04.2015

На самом деле в наши дни это больше похоже на:

// Construct an intent for opening a folder
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(aDownloadFolder), "resource/folder");
// Check that there is an app activity handling that intent on our system
if (intent.resolveActivityInfo(aContext.getPackageManager(), 0) != null) {
    // Yes there is one start it then
    startActivity(intent);
} else {
    // Did not find any activity capable of handling that intent on our system 
    // TODO: Display error message or something    
}
person Slion    schedule 01.05.2020