webentwicklung-frage-antwort-db.com.de

Wählen Sie eine beliebige Art von Datei über eine Absicht auf Android

Ich möchte einen Intentchooser für Apps starten, die jede Art von Datei zurückgeben können

Derzeit verwende ich (den ich aus dem Android E-Mail-Quellcode für Dateianhang) kopiert habe)

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

Auf meinem Galaxy S2 werden jedoch nur "Galerie" und "Musik-Player" angezeigt. Auf diesem Gerät befindet sich ein Datei-Explorer, der in der Liste angezeigt werden soll. Ich möchte auch, dass die Kamera-App in der Liste angezeigt wird, damit der Benutzer ein Bild aufnehmen und es über meine App senden kann. Wenn ich den Astro-Dateimanager installiere, reagiert er auch auf diese Absicht. Meine Kunden sind ausschließlich Besitzer von Galaxy SII und ich möchte sie nicht zwingen, den Astro-Dateimanager zu installieren, da sie bereits über einen einfachen, aber ausreichenden Dateimanager verfügen.

Irgendeine Idee, wie ich das erreichen könnte? Ich bin mir ziemlich sicher, dass ich in einem solchen Menü bereits den Standard-Dateimanager zum Auswählen einer Datei gesehen habe, aber ich kann mich nicht erinnern, in welcher App.

82
ErGo_404

Nicht für die Kamera, sondern für andere Dateien.

In meinem Gerät habe ich ES File Explorer installiert und das funktioniert bei mir einfach ..

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
76
user370305

Der Samsung-Datei-Explorer benötigt nicht nur benutzerdefinierte Aktionen (com.sec.Android.app.myfiles.PICK_DATA), sondern auch Kategorieteile (Intent .CATEGORY_DEFAULT) und MIME-Type als extra übergeben werden.

Intent intent = new Intent("com.sec.Android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

Sie können diese Aktion auch zum Öffnen mehrerer Dateien verwenden: com.sec.Android.app.myfiles.PICK_DATA_MULTIPLE Hier ist meine Lösung, die auf Samsung und anderen Geräten funktioniert:

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

Diese Lösung funktioniert gut für mich und ist vielleicht für jemand anderen nützlich.

44
Chupik

diese Arbeit für mich auf Galaxy Note seine Show-Kontakte, Dateimanager auf Gerät, Galerie, Musik-Player installiert

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

hier erhalten Sie den Pfad in onActivityResult der Aktivität.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}
37
alireza

Es stellte sich heraus, dass der Samsung-Datei-Explorer eine benutzerdefinierte Aktion verwendet. Aus diesem Grund konnte ich den Samsung-Datei-Explorer sehen, wenn ich nach einer Datei aus den Samsung-Apps suchte, aber nicht aus meiner.

Die Aktion ist "com.sec.Android.app.myfiles.PICK_DATA".

Ich habe eine benutzerdefinierte Aktivitätsauswahl erstellt, in der Aktivitäten angezeigt werden, bei denen beide Absichten gefiltert werden.

1
ErGo_404