it-swarm.com.de

Android: Wie kann ich einen bestimmten Ordner über Intent öffnen und dessen Inhalt in einem Dateibrowser anzeigen?

Ich dachte, das wäre einfach, aber wie sich herausstellt, ist es leider nicht so.

Was ich habe:

Ich habe auf meinem externen Speicher einen Ordner namens "myFolder" (keine SD-Karte, da dies ein Nexus 4 ist, aber das sollte nicht das Problem sein). Der Ordner enthält einige *.csv-Dateien.

Was ich möchte:

Ich möchte eine Methode schreiben, die Folgendes ausführt: Eine Vielzahl von Apps (Dateibrowser) anzeigen, aus denen ich eine auswählen kann (siehe Bild). Nachdem ich darauf geklickt habe, sollte der ausgewählte Dateibrowser gestartet werden und der Inhalt von "myFolder" angezeigt werden. Nicht mehr und nicht weniger.

enter image description here

Meine Frage:

Wie mache ich das genau? Ich denke, ich bin mit dem folgenden Code ziemlich nahe gekommen, aber egal was ich mache - und ich bin sicher, dass es etwas geben muss, das ich noch nicht richtig verstanden habe - es öffnet immer nur den Hauptordner aus dem externen Speicher.

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);
}
57
kaolick

Ich habe es endlich geschafft. Auf diese Weise werden nur wenige Apps angezeigt (Google Drive, Dropbox, Root Explorer und Solid Explorer). Es funktioniert gut mit den beiden Explorern, aber nicht mit Google Drive und Dropbox (ich denke, weil sie nicht auf den externen Speicher zugreifen können). Der andere MIME-Typ wie "*/*" ist ebenfalls möglich.

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"));
}
36
kaolick

Das sollte funktionieren:

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
}

Stellen Sie sicher, dass auf Ihrem Gerät eine Datei-Explorer-App installiert ist.

EDIT: Eine Shantanus Empfehlung aus dem Kommentar hinzugefügt.

-BIBLIOTHEKEN: Sie können sich auch diese Bibliotheken für Datei-/Verzeichnisauswahl ansehen https://Android-arsenal.com/tag/35 , wenn die aktuelle Lösung Ihnen nicht hilft .

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

Wenn im obigen Code setDataAndType "*/*" ist, wird ein eingebauter Dateibrowser geöffnet, um eine Datei auszuwählen, wenn ich "text/plain" setze. Ich habe Dropbox, Google Drive installiert. Wenn ich Dropbox deinstalliere, funktioniert "*/*" nur zum Öffnen des Dateibrowsers. Dies ist Android 4.4.2. Ich kann Inhalte von Dropbox und für Google Drive über getContentResolver (). OpenInputStream (data.getData ()) herunterladen.

2
WayneSplatter

dieser Code funktioniert mit OI File Manager:

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

sie können den OI File Manager hier erhalten: http://www.openintents.org/de/filemanager

1
Abtin tashakor

Heute sollten Sie einen Ordner mit seinem Inhalt darstellen: URI, wie von Storage Access Framework abgerufen, und das Öffnen sollte so einfach sein wie:

Intent i = new Intent(Intent.ACTION_VIEW, uri);
startActivity(i);

Leider enthält die App "Dateien" derzeit einen Fehler, der zum Absturz führt, wenn Sie dies mit dem externen Speicheranbieter versuchen. Ordner von Drittanbietern können jedoch auf diese Weise angezeigt werden.

0
j__m