Funktionen zum Arbeiten mit Dateien in Anwendungen auf verschiedenen mobilen Plattformen

    Bei der Entwicklung einer plattformübergreifenden mobilen Anwendung mit Dateifunktionalität stellt sich die Frage nach der Organisation der Dateiarbeitsprozesse auf jeder Plattform. Dieses Problem trat bei der Entwicklung einer neuen Version von Edusty auf , mit der Sie Dateien für Ihre Klassenkameraden freigeben können. In diesem Artikel erfahren Sie, wie Sie Dateien in Anwendungen importieren und exportieren, die auf den Betriebssystemen iOS, Android, Windows Phone ausgeführt werden.




    iOS


    Im iOS-Betriebssystem ist das Konzept eines Dateisystems für den Benutzer verborgen und die Interaktion mit Dateien erfolgt durch die Anwendung selbst und nur mit Dateien, die sich im Anwendungsverzeichnis befinden. Es gibt verschiedene Möglichkeiten, eine Datei in das Anwendungsverzeichnis zu importieren - mithilfe der iTunes-Dateifreigabe oder durch Registrieren von Dateitypen für die Anwendung.

    Wenn Sie die iTunes-Dateifreigabe verwenden, wird die Anwendung in iTunes im Abschnitt "Allgemeine Dateien" angezeigt, in dem Sie der Anwendung vom Computer aus Dateien hinzufügen können. Auf diese Weise hinzugefügte Dateien fallen in das Verzeichnis / Documents der Anwendung.



    Die Anwendung selbst muss dieses Verzeichnis für neue Dateien steuern. Beachten Sie auch, dass die iTunes-Dateifreigabe Benutzern direkten Zugriff auf Dokumente bietet. Dies bedeutet, dass Dateien in diesem Verzeichnis jederzeit umbenannt, gelöscht usw. werden können.

    Um die iTunes-Dateifreigabe zu verwenden, müssen Sie UIFileSharingEnabled ( Die Anwendung unterstützt die gemeinsame Nutzung von iTunes-Dateien in der Anwendungsdatei info.plist.

    UIFileSharingEnabled


    Wenn Sie Dateitypen registrieren, wird die Anwendung in der Auswahlliste zum Öffnen der Datei angezeigt, wenn Sie auf das Standarddialogfeld "Öffnen mit" klicken.



    Wenn Sie eine Datei auf diese Weise öffnen, wird eine Kopie davon im Verzeichnis / Documents / Inbox abgelegt , und die Anwendung ruft die Anwendung auf: openURL: sourceApplication: annotation: protocol UIApplicationDelegate , in der die URL der zu öffnenden Datei aufgerufen wird.

    Dateien im Verzeichnis / Documents / Inbox können gelesen und gelöscht, aber nicht geändert werden. Um die Datei zu ändern, müssen Sie sie in ein anderes Verzeichnis verschieben, z. B. nach / Documents .

    Um Dateien auf diese Weise importieren zu können, müssen Sie den Schlüssel CFBundleDocumentTypes hinzufügen(Dokumenttypen) in der Anwendungsdatei info.plist. Sein Wert ist ein Array, von dem jedes Element ein Wörterbuch ist, das zur Beschreibung aller von der Anwendung unterstützten Dokumenttypen verwendet wird. Eine vollständige Beschreibung der möglichen Hinweise und ihrer Bedeutung finden Sie in der Dokumentation: developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html

    Wir haben keine Einschränkungen für die Dateitypen vorgenommen, aber den Import von Dateien ermöglicht . Info.plist sieht gleichzeitig so aus:

    CFBundleDocumentTypesCFBundleTypeNameAll filesCFBundleTypeRoleViewerLSHandlerRankAlternateLSItemContentTypespublic.data


    Zum Exportieren von Dateien aus der Anwendung wird dasselbe Dialogfeld "Öffnen mit" verwendet, mit dem der UIDocumentInteractionController initialisiert wird . Es ist möglich, die Liste der Anwendungen zum Öffnen einer Datei sofort zu öffnen, die Liste der Anwendungen zum Öffnen einer Datei zusammen mit Standarddiensten wie Drucken einer Datei, Senden per E-Mail usw. zu öffnen. Ebenso ist es möglich, die Datei mit dem eingebauten Previewer zu öffnen, von wo aus eine Schaltfläche zum Öffnen der Datei durch eine andere Anwendung verfügbar ist.



    Android


    In Android können Anwendungen auf andere Dateien als die in privaten Anwendungsverzeichnissen zugreifen.
    Zur Ausführung von Vorgängen wie Auswählen einer Datei, Senden einer E-Mail oder Öffnen eines Links in einem Browser werden Absichten verwendet.
    Um eine Datei aus dem Dateisystem auszuwählen, müssen Sie die Aktion ACTION_GET_CONTENT verwenden .
    Mit der setType () -Methode können Sie angeben, welche Dateitypen zur Auswahl stehen sollen. Wenn Sie beispielsweise
    setType („audio / mp3“) angeben , werden in der Anwendung zum Anzeigen von Dateien nur Dateien mit der Erweiterung .mp3 angezeigt, oder Sie geben „* / *“ an, damit alle Dateien angezeigt werden. Dann rufen wir die Methode startActivityForResult () auf , die wir als Parameter übergebenIntent.сreateChooser () , das einen Anwendungsauswahldialog erstellt.
    Außerdem müssen Sie in der Manifestdatei die erforderlichen Berechtigungen hinzufügen:





    Sobald wir eine Datei im Dateimanager wählen wir uns in einem Verfahren finden onActivityResult (int requestCode, int Result, eine Intent - Daten) , wo Daten ist Uri unsere Datei.

    Verwenden Sie zum Öffnen von Dateien über den Dienst die Aktion ACTION_VIEW . Die Anwendung zum Öffnen der Datei wird mithilfe der FileOpen- Klasse ausgewählt (die sich in den Erweiterungen von StackOverFlow befindet und leicht überarbeitet wurde), in der überprüft wird, welcher Dateityp entsprechend seiner potenziellen Erweiterung geöffnet werden soll.

    Fileopen.class
    public class FileOpen {
        public static void openFile(Context context, File url) throws IOException {
            File file = url;
            Uri uri = Uri.fromFile(file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            if (url.toString().contains(".doc") || url.toString().contains(".docx") || url.toString().contains(".odt")) {
                // Word document
                intent.setDataAndType(uri, "application/msword");
            } else if (url.toString().contains(".pdf")) {
                // PDF file
                intent.setDataAndType(uri, "application/pdf");
            } else if (url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
                // Powerpoint file
                intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
            } else if (url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
                // Excel file
                intent.setDataAndType(uri, "application/vnd.ms-excel");
            } else if (url.toString().contains(".zip") || url.toString().contains(".rar")) {
                // ZIP Files
                intent.setDataAndType(uri, "application/zip");
            } else if (url.toString().contains(".rtf")) {
                // RTF file
                intent.setDataAndType(uri, "application/rtf");
            } else if (url.toString().contains(".wav") || url.toString().contains(".mp3")) {
                // WAV audio file
                intent.setDataAndType(uri, "audio/x-wav");
            } else if (url.toString().contains(".gif")) {
                // GIF file
                intent.setDataAndType(uri, "image/gif");
            } else if (url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
                // JPG file
                intent.setDataAndType(uri, "image/jpeg");
            } else if (url.toString().contains(".txt")) {
                // Text file
                intent.setDataAndType(uri, "text/plain");
            } else if (url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
                // Video files
                intent.setDataAndType(uri, "video/*");
            } else {
                intent.setDataAndType(uri, "*/*");
            }
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }
    


    Wenn eine Übereinstimmung gefunden wird, verwenden wir die Methode setDataAndType () , die angeben , Uri übertragen und den MIME - Typ der Daten.



    Wenn die Datei ein Format enthält, das von uns nicht berücksichtigt wird, geben wir in setDataAndType () "* / *" als Typ an. Auf diese Weise zeigt das System alle auf dem Gerät installierten Anwendungen an, sodass Sie selbst auswählen können, welche Dateien geöffnet werden sollen.

    Windows Phone


    Universelle Anwendungen für den Windows Store / Windows Phone Store öffnen das Dateisystem fast vollständig, zumindest nicht die Systemordner. Mit der OpenFilePicker-Klasse können Sie Dateien auf jeder Plattform von jeder verfügbaren Quelle aus öffnen: Gerätespeicher, externe Medien und Geräte sowie Clouds (sofern die entsprechenden Anwendungen installiert sind). In dieser Hinsicht gibt es keine Probleme beim Öffnen von Dateien auf diesen Geräten. Die Standardklasse ermöglicht es Ihnen sogar, ein Foto über das Dateiauswahlmenü aufzunehmen, was sehr praktisch ist.

    Um Dateien über das Standarddialogfeld zur Dateiauswahl zu öffnen, müssen Sie eine Instanz der OpenFilePicker-Klasse erstellen und mit mehreren Parametern initialisieren:
    List .FileTypeFilter
    - eine Sammlung zulässiger Dateierweiterungen (um Dateien auswählen zu können, müssen Sie den Eintrag "*" hinzufügen).
     PickerLocationId .SuggestedStartLocation
    - Mit diesem Aufzählungstyp können Sie den Speicherort angeben, der zuerst im Dialogfeld geöffnet wird (Beispiel: PickerLocationId.ComputerFolder).
    PickerViewMode .ViewMode
    - Ermöglicht die Auswahl der Art der Dateianzeige (Liste oder Raster).

    Der Aufruf des Dateiauswahldialogs unter Windows 8.1 und Windows Phone 8.1 unterscheidet sich trotz der universellen API (wie Sie wissen, ist dies nicht 100% universell).

    Für eine Windows 8.1-Anwendung müssen Sie die Methode .PickMultipleFilesAsync () oder .PickSingleFileAsync () aufrufen , je nachdem, ob Sie eine oder mehrere Dateien auswählen müssen. Diese Methoden geben entsprechend IReadOnlyList zurückund StorageFile (genau genommen geben sie Task zurück, daher müssen Sie async / await verwenden).



    Bei Windows Phone 8.1 sind die Dinge etwas komplizierter. Ähnliche Methoden heißen .PickMultipleFilesAndContinue () und .PickSingleFileAndContinue () . Beide Methoden geben nichts zurück (void). Nach der Auswahl von Dateien im Dialogfeld wird jedoch die ContinueFileOpenPicker () -Methode aufgerufen , die ein Mitglied der IFileOpenPickerContinuable- Schnittstelle ist . Diese Schnittstelle ist nicht in die Standard-API integriert, kann jedoch in die ContinuationManager- Klasse übernommen werden . Weitere Informationen darüber , wie die Arbeit nach Methoden aufrufen * AndContinue (), sowie Download - Klasse weiterhin ContinuationManager möglich hier. Nachdem die ContnuationManager- Klasse gemäß den Anweisungen zum Projekt hinzugefügt wurde, müssen Sie die Klasse, von der die .PickMultipleFilesAsync () - oder .PickSingleFileAsync () -Methode aufgerufen wird , von der IFileOpenPickerContinuable- Schnittstelle erben . Anschließend müssen Sie die void- Methode ContinueFileOpenPicker (FileOpenPickerContinuationEventArgs args) implementieren , wobei args.Files eine Auflistung von StorageFile-Objekten enthält.



    Das Öffnen von Dateien über den Dienst erfolgt, indem die Datei im internen Ordner der Anwendung auf dem Datenträger gespeichert und anschließend in der LaunchFileAsync () - Methode der Launcher- Klasse angegeben wird. Danach öffnet das System entweder die Datei mit der Standardanwendung für diesen Dateityp oder bietet an, die Anwendung aus den installierten auszuwählen, oder bietet an, sie im Geschäft zu finden.

    Jetzt auch beliebt: